scala - sirve - tesis sobre youtube pdf
¿Cuál es la diferencia entre Unidad y Nada? (3)
Ambos tipos, Unit
y Nothing
indican una función que no devuelve nada. ¿Cual es la diferencia entre ellos?
Para agregar un aspecto a la respuesta de Petr: Nothing
juega un papel importante en la jerarquía de tipos. Es un tipo de fondo. Eso significa que es un subtipo de cualquier otro tipo, que es como el opuesto de Any
, que es un supertipo de todo. Puedes encontrar una buena explicación here .
Unit
es un tipo que tiene exactamente un valor; consulte Tipo de unidad . Por otro lado, Nothing
no tiene un valor posible , ver Tipo de fondo .
Una función que no devuelve nada debe tener el tipo de devolución Unit
. Si fuera Nothing
, la función no podría devolver un resultado. La única manera de salir de la función sería por una excepción.
Nothing
se usa de una manera diferente. Se caracteriza por dos propiedades:
-
Nothing
es un subtipo de cualquier otro tipo (incluidoNull
). - No existen instancias de este tipo.
¿Cuándo es esto útil? None
considere None
:
object None extends Option[Nothing]
Debido a que Option
es covariante en su parámetro de tipo y Nothing
es un subtipo de todo, Option[Nothing]
es un subtipo de Option[A]
para cada tipo A
Entonces, podemos hacer un objeto None
que es un subtipo de Option[A]
para cada A
Esto es razonable, ya que no se puede crear una instancia de Option[Nothing]
por lo que la Option[Nothing]
siempre tendrá un valor. similar
object Nil extends List[Nothing]
Unit
corresponde a la lógica verdadera y Nothing
corresponde a la lógica falsa en el isomorfismo de Curry-Howard , donde vemos los tipos como proposiciones y las funciones como pruebas,.
Unit
significa que (a) la función tiene efectos secundarios como entrada y salida, (b) estos efectos secundarios son el objetivo principal de la función. Por supuesto, la función puede tener efectos secundarios, incluso si su tipo es diferente de la Unit
.
Nothing
es un tipo especial en Scala, porque (a) no tiene valores (la Unidad tiene exactamente un valor - ()
), por lo que no puede devolver un valor de tipo Nothing
y (b) es un subtipo de todos los otros tipos. Eso significa que si algo tiene el tipo Nothing
, puede usarse en cualquier lugar donde se requiera otro tipo, pero no producirá ningún resultado. Esto se usa para tratar con excepciones: throw
expresión tiene un tipo de Nothing
, por lo que se puede usar básicamente en cualquier parte del programa.
Simplemente, Nothing
significa que hubo un error y no se devolvió nada, mientras que Unit
significa que hubo efectos secundarios.
La programación en Scala tiene una buena explicación de eso.