Kotlin Void, Unit, Nothing: Guia Completo 2025

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Kotlin - Void vs. Unit vs. Nothing: melhores práticas em 2025

\n\n

Olá, colegas! Se você já escreveu em Kotlin e se perguntou: "Por que aqui é Unit e não void? E que bicho é esse Nothing?" — você veio ao lugar certo. Este tópico é um verdadeiro sucesso no Stack Overflow com milhares de visualizações, e não é à toa. A confusão entre Void, Unit e Nothing pode confundir até mesmo um desenvolvedor experiente. Em 2025, quando Kotlin ocupa com confiança seu espaço no backend (Ktor, Spring) e Android, entender esses tipos não é apenas um capricho, mas uma necessidade para escrever código limpo, seguro e expressivo.

\n\n

Neste artigo, não vamos apenas listar definições. Vamos analisá-los com exemplos reais, mostrar onde cada um é adequado e onde é um pecado mortal. Vamos lá!

\n\n

Resumindo: o que é o quê?

\n\n

Vamos logo esclarecer as coisas. Esses três tipos resolvem problemas diferentes, embora à primeira vista pareçam semelhantes.

\n\n
    \n
  • Void — é uma relíquia do Java. Em Kotlin, existe apenas para compatibilidade. Nunca o use em código Kotlin puro.
  • \n
  • Unit — significa "não retorno nada, mas ainda sou um tipo". Análogo ao void do Java, mas melhor. Usado em 99% dos casos quando uma função não retorna um resultado significativo.
  • \n
  • Nothing — significa "a função nunca será concluída normalmente". Ela要么 lançará uma exceção,要么 entrará em um loop infinito. É uma ferramenta poderosa para controlar o fluxo de execução.
  • \n
\n\n

Parece simples? Vamos nos aprofundar.

\n\n

Void — um estranho no ninho

\n\n

Se você escreve em Kotlin puro, esqueça Void como um pesadelo. É uma classe do Java (java.lang.Void), que é um wrapper para a palavra-chave void. Ela existe em Kotlin exclusivamente para interagir com código Java.

\n\n

Exemplo de quando Void pode aparecer no seu projeto:

\n\n
import java.lang.Void\n\n// Nunca faça isso em Kotlin puro!\nfun doSomething(): Void? {\n    println("Fazendo algo...")\n    return null // É obrigatório retornar null, caso contrário, erro de compilação\n}
\n\n

Viu esse return null? Essa é a principal desvantagem. Void não pode ter uma instância criada (seu construtor é privado), mas pode ser null. Isso gera confusão e código desnecessário.

\n\n

Melhor prática 2025: Use Void apenas se estiver sobrescrevendo um método de uma biblioteca Java que exija Void como parâmetro genérico. Por exemplo, em Callable<Void>. Em todos os outros casos, use Unit.

\n\n

Unit — o rei das funções vazias

\n\n

Unit é a verdadeira maneira Kotlin de dizer: "A função foi executada, mas o resultado não me interessa". Ao contrário de void, Unit é um tipo completo com um único valor — Unit.

\n\n

Isso oferece recursos interessantes:

\n\n
    \n
  1. Genéricos. Você pode usar Unit em funções genéricas.
  2. \n
  3. Funções de ordem superior. Você pode passar uma função que retorna Unit como argumento.
  4. \n
  5. Extensões. É possível escrever funções de extensão que retornam Unit.
  6. \n
\n\n

Exemplo padrão — expressões lambda:

\n\n
fun executeAction(action: () -> Unit) {\n    println("Preparando para a ação...")\n    action() // Chama a função passada\n    println("Ação executada.")\n}\n\nfun main() {\n    // Lambda que não retorna nada, mas causa um efeito colateral\n    executeAction {\n        println("Olá da lambda!")\n    }\n}
\n\n

Aqui

Blogs

Book Recommendations