DEV Community

Rodrigo Sicarelli
Rodrigo Sicarelli

Posted on

Kotlin Koans BR: Tipo "nenhum" (Nothing)

🔗 Tarefa

Especifique o tipo de retorno Nothing para a função failWithWrongAge.

Sem especificar o tipo Nothing, a compilação da função checkAge falha, uma vez que o compilador pressupõe que age possa ser null.

Caso de uso

Nothing representa um valor que nunca existe, e não é permitido ter um valor ou objeto desta classe porque seu construtor é privado.

Nothing serve para denotar funções que nunca devolvem um valor.

fun esperarPraSempre(): Nothing {
    while (true) {
        // Estou esperando...
    }
}   
Enter fullscreen mode Exit fullscreen mode

O papel especial de Nothing

Na teoria dos tipos, Nothing é considerado o "tipo mais baixo", ou seja, é um subtipo de todos os outros tipos em Kotlin. Isso faz com que o valor de Nothing possa ser atribuído a variáveis de todos os tipos.

fun erro(mensagem: String): Nothing = throw IllegalStateException(mensagem)

fun encontrarSessao(idSessao: Int): Sessao =
    sessoesEmAndamento
        .firstOrNull { it.id == idSessao }
        ?: erro("Sessão não encontrada!")
Enter fullscreen mode Exit fullscreen mode

Ainda que a função erro() devolva Nothing, a atribuição do seu resultado a uma variável de tipo Sessao é válida, pois Nothing atua como subtipo de Sessao.

Vantagens

  • Comunicação clara e direta: uma função que retorna Nothing não tem a intenção de retornar um valor, removendo qualquer ambiguidade.
  • Flexibilidade: se comporta como um "camaleão" no mundo dos tipos em Kotlin, se tornando útil em diferentes cenários.
  • Economia de Recursos: devido à inteligência do compilador, não gastamos memória alocando algo que nunca deveria existir.
  • Blindagem contra erros: o Nothing deixa claro: nunca vou retornar. Esse tipo de garantia pode evitar surpresas desagradáveis em tempo de execução.

Desvantagens

  • Adaptação necessária: para quem está iniciando em Kotlin, o Nothing pode se apresentar como um conceito enigmático, requerendo uma curva de aprendizado.
  • Uso excessivo: é possível cair na armadilha de usar o Nothing de maneira confusa e excessiva, complicando o código ao invés de simplificar.

Analogia

Imagine um livro colorido que tenha uma capa com título, autores e editora. No entanto, ao abrir, todas as páginas estão em branco. O livro existe, tem peso, tem formato, mas não tem conteúdo.

É assim que o Nothing funciona em Kotlin. Ele tem presença, possui representação, porém não contém um valor ou significado intrínseco.

No código, quando uma função retorna Nothing, é como se estivéssemos abrindo um livro esperando uma história, mas encontramos páginas
vazias.

Top comments (0)