¿Cuál es el propósito del retorno de la unidad en las funciones?

De la documentation de Kotlin:

Si una function no devuelve ningún valor útil, su tipo de devolución es Unidad. La unidad es un tipo con un solo valor: Unit.VALUE. Este valor no tiene que ser devuelto explícitamente:

fun printHello(name : String?) : Unit { if (name != null) print("Hello, $name!") else print("Hi there!") // We don't need to write 'return Unit.VALUE' or 'return', although we could } 

¿Cuál es el propósito del retorno de la unidad en las funciones? ¿Por qué está VALOR allí? ¿Qué es este VALOR?

El propósito es el mismo que el de C o Java. Solo la unidad es un tipo apropiado, por lo que se puede pasar como un argumento genérico, etc.

  1. Por qué no lo llamamos "vacío": porque la palabra "vacío" significa "nada", y hay otro tipo, " Nothing , que significa simplemente "sin ningún valor", es decir, el cálculo no se completó normalmente (en bucle para siempre o lanzó una exception). No podríamos permitirnos el choque de significados.

  2. Por qué la Unidad tiene un valor (es decir, no es lo mismo que Nada): porque el código genérico puede funcionar sin problemas. Si le pasa a la Unidad un parámetro genérico T, el código escrito para cualquier T esperará un object, y debe haber un object, el único valor de la Unidad.

  3. Cómo acceder a ese valor de Unidad: dado que es un object singleton, solo diga Unit

La razón principal por la que existe la unidad es por razones genéricas. Usemos el ejemplo de los documentos de Kotlin.

 class Box<T>(t: T) { var value = t } 

Podemos tener

 var box = Box(Unit) 

Es por esto que Unit devuelve un valor para que Kotlin lo pueda inferir del tipo pasado a la initialization de la class. Por supuesto, también podrías escribirlo explícitamente así,

 var box = Box<Unit>(Unit) 

pero de todos modos, debe tener un valor de retorno. Ahora, la palabra key void en Java en Kotlin es Nothing . ¿Nada es el último sino un tipo en la jerarquía de types en Kotlin con el último ser Nada? (Nullable Nada). Esto no devuelve ningún valor en absoluto. Como no devuelve ningún valor, no podemos pasarlo como un tipo en el código anterior.

 var box = Box(Nothing) //This will return an Error 
  • ¿Kotlin o Swift pueden analizar JSON como Javascript?
  • Se unió a w / Spring Data y QueryDSL para orderar los resultados
  • Definir el tipo de retorno de modificación utilizando la interfaz en lugar de la class
  • ¿Cómo funcionan las funciones de order superior de Kotlin?
  • Android (Kotlin): CookieHandler no funciona con el método POST, pero con los trabajos GET
  • Kotlin mutableMap foreach
  • La interfaz de Java SAM creada a partir de Kotlin da ClassCastException
  • Formas dinámicas de Android
  • Kotlin sequence "skip" first N entries
  • ¿Qué path es mejor si espero usar una syntax como function estática en Kotlin?
  • Inicialización de Kotlin 2d Array