November 21, 2024
UNIFIED TYPES

Any es el supertipo de todos los tipos, también llamado tipo superior. Define ciertos métodos universales como equals, hashCode y toString. Any tiene dos subclases directas: AnyVal y AnyRef.

AnyVal representa tipos de valores. Hay nueve tipos de valores predefinidos y no aceptan valores NULL: Double, Float, Long, Int, Short, Byte, Char, Unit y Boolean. Unit es un tipo de valor que no contiene información significativa. Hay exactamente una instancia de Unit que puede declararse literalmente así: (). Todas las funciones deben devolver algo, por lo que a veces Unit es un tipo de devolución útil.

AnyRef representa tipos de referencia. Todos los tipos sin valor se definen como tipos de referencia. Cada tipo definido por el usuario en Scala es un subtipo de AnyRef. Si Scala se usa en el contexto de un entorno de tiempo de ejecución de Java, AnyRef corresponde a java.lang.Object.

Aquí hay un ejemplo que demuestra que las cadenas, los números enteros, los caracteres, los valores booleanos y las funciones son todos del tipo Any como cualquier otro objeto:

val list: List[Any] = List(
  "a string",
  732,  // an integer
  'c',  // a character
  true, // a boolean value
  () => "an anonymous function returning a string"
)

list.foreach(element => println(element))

Define una lista de valores de tipo List[Any]. La lista se inicializa con elementos de varios tipos, pero cada uno es una instancia de scala.Any, por lo que puede agregarlos a la lista.

Aquí está la salida del programa:

a string
732
c
true
<function>

Nothing and Null

Nothing es un subtipo de todos los tipos, también llamado tipo inferior. No hay ningún valor que tenga el tipo Nothing. Un uso común es señalar la no terminación, como una excepción lanzada, la salida del programa o un bucle infinito (es decir, es el tipo de una expresión que no se evalúa como un valor o un método que no regresa normalmente).

Null es un subtipo de todos los tipos de referencia (es decir, cualquier subtipo de AnyRef). Tiene un único valor identificado por la palabra clave literal null. Null se proporciona principalmente para la interoperabilidad con otros lenguajes JVM y casi nunca debe usarse en código Scala.

Leave a Reply

Your email address will not be published. Required fields are marked *