orden - funciones kotlin
¿Cuál es el propósito de la unidad de retorno en funciones (3)
De la documentación de Kotlin:
Si una función no devuelve ningún valor útil, su tipo de retorno 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 de la unidad de retorno en funciones? ¿Por qué hay VALOR allí? ¿Qué es este VALOR?
El propósito es el mismo que el void
C o de Java. Sólo la unidad es un tipo adecuado, por lo que puede pasarse como un argumento genérico, etc.
Por qué no lo llamamos "vacío": porque la palabra "vacío" significa "nada", y hay otro tipo,
Nothing
, que significa simplemente "ningún valor", es decir, el cálculo no se completó normalmente (en bucle para siempre o lanzó una excepción). No podíamos permitirnos el choque de significados.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 en ese momento. Si pasa la Unidad por un parámetro genérico T, el código escrito para cualquier T esperará un objeto, y debe haber un objeto, el único valor de la Unidad.
Cómo acceder a ese valor de Unidad: ya que es un objeto singleton, simplemente diga
Unit
La razón principal por la que existe Unit es por razones genéricas. Vamos a usar el ejemplo de los documentos de Kotlin.
class Box<T>(t: T) {
var value = t
}
Podemos tener
var box = Box(Unit)
Esta es la razón por la que la Unidad devuelve un valor para que Kotlin pueda inferirlo del tipo pasado en la inicialización de la clase. 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 clave vacía en Java en Kotlin es Nada . Nada es el último, pero un tipo en la jerarquía de tipos en Kotlin con el último es ¿Nada? (Nada anulable). Esto no devuelve ningún valor en absoluto. Debido a que 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
UNIT
realidad contiene información valiosa, básicamente significa "HECHO". Simplemente devuelve la información a la persona que llama, que el método se ha completado. Esta es una información real, por lo que puede verse como el valor de retorno de un método.