Avatar ·

Kotlin: Void, Unit e Nothing — qual a diferença e quando usar cada um?

Olá a todos! Recentemente comecei a estudar Kotlin e migrei do Java. No Java, eu estava acostumado com void para métodos que não retornam nada. Mas no Kotlin, vejo três conceitos semelhantes: Void, Unit e Nothing. E fiquei confuso.

Por exemplo, escrevo uma função que simplesmente imprime uma saudação:

fun greet(name: String) {
    println("Hello, $name!")
}

O compilador diz que o tipo de retorno é Unit. Mas também posso escrever assim:

fun greet(name: String): Unit {
    println("Hello, $name!")
}

E também vi em código de outras pessoas Void (com letra maiúscula) e Nothing. Quando tentei usar Nothing como tipo de retorno, o compilador disse que a função nunca termina normalmente.

Por favor, me expliquem:

  1. Quais as diferenças entre Unit, Void e Nothing?
  2. Quando devo usar cada um?