¿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 
  • ¿Cómo corutinas puede ser más rápido que los hilos?
  • Propiedades del constructor Kotlin y llamar a diferentes constructores de superclass
  • Realm Nested Object sort
  • Kotlinx no puede resolver el símbolo "sintético"
  • Disparador usando Teamcity Kotlin DSL
  • FragmentManager lanza IllegalArgumentException en Kotlin
  • ¿Cómo puedo usar un model de vista, con sqlite y un receptor de difusión para actualizar la UI?
  • Kotlin 'hasta' diversión creando basura IntRange
  • Modificar el comportamiento de List.get en Kotlin
  • Tiene reference no resuelta: setText cuando convierte java en kotlin
  • Usar un object Kotlin en una class generada en time de ejecución