Avatar ·

Kotlin: Void, Unit y Nothing — ¿cuál es la diferencia y cuándo usar cada uno?

¡Hola a todos! Recientemente empecé a estudiar Kotlin y vengo de Java. En Java estaba acostumbrado a void para métodos que no devuelven nada. Pero en Kotlin veo tres conceptos similares: Void, Unit y Nothing. Y estoy confundido.

Por ejemplo, escribo una función que simplemente imprime un saludo:

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

El compilador dice que el tipo de retorno es Unit. Pero también puedo escribirlo así:

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

Además, he visto en código ajeno Void (con mayúscula) y Nothing. Cuando intenté usar Nothing como tipo de retorno, el compilador dijo que la función nunca finaliza normalmente.

Por favor, aclárenme:

  1. ¿En qué se diferencian Unit, Void y Nothing?
  2. ¿Cuándo se debe usar cada uno?