¿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 - Henetworkinga de Java Class que implementa Parcelable
  • Referencias a funciones genéricas
  • Creando un nuevo proyecto en Android studio-Kotlin error
  • reference no resuelta: lanzamiento
  • Causado por: rx.exceptions.MissingBackpressureException
  • Kotlin: el comstackdor no deduce el tipo genérico para algunos operadores
  • Grabador de video Android: no se pudo get la superficie
  • ¿Qué significa una firma de function de Kotlin con T. ()?
  • Contravarianza en Kotlin
  • Kotlin: Interface Queue no tiene constructores
  • Herencia genérica de Kotlin