Tipos de datos Scala
Los principales tipos de datos admitidos por Scala incluyen tipos básicos, tipos de colección y tipos especiales.
La siguiente tabla enumera los tipos de datos admitidos por Scala:
| Categoría de tipo | Tipo de datos | Descripción | Clase real en la biblioteca estándar de Scala |
|---|---|---|---|
| Tipo básico | Byte | Entero con signo de 8 bits, rango de valores de -128 a 127 | scala.Byte |
| Tipo básico | Short | Entero con signo de 16 bits, rango de valores de -32768 a 32767 | scala.Short |
| Tipo básico | Int | Entero con signo de 32 bits, rango de valores de -2147483648 a 2147483647 | scala.Int |
| Tipo básico | Long | Entero con signo de 64 bits, rango de valores de -9223372036854775808 a 9223372036854775807 | scala.Long |
| Tipo básico | Float | Número de coma flotante de precisión simple IEEE 754 de 32 bits | scala.Float |
| Tipo básico | Double | Número de coma flotante de doble precisión IEEE 754 de 64 bits | scala.Double |
| Tipo básico | Char | Carácter Unicode sin signo de 16 bits, rango de valores de U+0000 a U+FFFF | scala.Char |
| Tipo básico | String | Tipo de cadena, representa una secuencia de caracteres | java.lang.String |
| Tipo básico | Boolean | Tipo booleano, cuyo valor estrueofalse | scala.Boolean |
| Tipo de colección | List | Lista enlazada inmutable | scala.collection.immutable.List |
| Tipo de colección | Set | Colección inmutable | scala.collection.immutable.Set |
| Tipo de colección | Map | Colección inmutable de pares clave-valor | scala.collection.immutable.Map |
| Tipo de colección | Array | Arreglo mutable | scala.Array |
| Tipo de colección | Tuple | Contenedor inmutable que puede contener elementos de diferentes tipos | scala.TupleN |
| Tipo de colección | Option | Representa un contenedor que puede contener un valor o estar vacío | scala.Option |
| Tipo de colección | Either | Representa uno de dos posibles tipos de valor | scala.util.Either |
| Tipo de colección | Try | Contenedor para manejar resultados de operaciones que pueden ser exitosas o fallidas | scala.util.Try |
| Tipo especial | Unit | Representa la ausencia de valor, equivalente a void en Javavoid | scala.Unit |
| Tipo especial | Null | Objeto singleton, representa el valor nulo de todos los tipos de referencia | scala.Null |
| Tipo especial | Nothing | Representa el tipo sin valor de retorno, es subtipo de todos los tipos | scala.Nothing |
| Tipo especial | Any | Supertipo de todos los tipos | scala.Any |
| Tipo especial | AnyRef | Supertipo de todos los tipos de referencia, equivalente a Object en JavaObject | scala.AnyRef |
En Scala, todos los tipos de datos son objetos.
Scala no tiene el concepto de tipos nativos (primitive types) como en Java. Aunque los tipos de datos básicos de Scala (como Int, Double, etc.) se ven sintácticamente similares a los tipos nativos de Java, en realidad son objetos. Esto significa que puedes llamar métodos en estos tipos.
Por ejemplo, el tipo Int en Scala es en realidad una instancia de la clase scala.Int, y scala.Int es una clase final que hereda de AnyVal. AnyVal es una clase especial en Scala que representa tipos de valor.
A continuación se muestra un programa Scala completo que demuestra el uso de varios tipos de datos:
Código del archivo DataTypeExamples.scala:
def main(args: Array[String]): Unit = {
// Tipos básicos
val byteValue: Byte = 127
val shortValue: Short = 32767
val intValue: Int = 2147483647
val longValue: Long = 9223372036854775807L
val floatValue: Float = 3.14f
val doubleValue: Double = 3.141592653589793
val charValue: Char = 'A'
val stringValue: String = "Hello, Scala!"
val booleanValue: Boolean = true
// Tipos de colección
val listValue: List[Int] = List(1, 2, 3)
val setValue: Set[String] = Set("Scala", "Java", "Python")
val mapValue: Map[String, Int] = Map("one" -> 1, "two" -> 2, "three" -> 3)
val arrayValue: Array[Int] = Array(4, 5, 6)
val tupleValue: (Int, String, Boolean) = (42, "Answer", true)
val optionValue: Option[String] = Some("I am here")
val eitherValue: Either[String, Int] = Right(42)
val tryValue: Try[Int] = Try(10 / 2)
// Tipos especiales
val unitValue: Unit = ()
val nullValue: String = null
val nothingValue: Nothing = throw new RuntimeException("Nothing value")
// Imprimir todos los valores
println(s"Byte Value: $byteValue")
println(s"Short Value: $shortValue")
println(s"Int Value: $intValue")
println(s"Long Value: $longValue")
println(s"Float Value: $floatValue")
println(s"Double Value: $doubleValue")
println(s"Char Value: $charValue")
println(s"String Value: $stringValue")
println(s"Boolean Value: $booleanValue")
println(s"List Value: $listValue")
println(s"Set Value: $setValue")
println(s"Map Value: $mapValue")
println(s"Array Value: ${arrayValue.mkString(", ")}")
println(s"Tuple Value: $tupleValue")
println(s"Option Value: $optionValue")
println(s"Either Value: $eitherValue")
println(s"Try Value: $tryValue")
println(s"Unit Value: $unitValue")
println(s"Null Value: $nullValue")
// nothingValue is not printed because it throws an exception
}
}
Compile con el compilador scalac y ejecute con el comando scala:
scalac DataTypeExamples.scala scala DataTypeExamples
Salida:
Byte Value: 127 Short Value: 32767 Int Value: 2147483647 Long Value: 9223372036854775807 Float Value: 3.14 Double Value: 3.141592653589793 Char Value: A String Value: Hello, Scala! Boolean Value: true List Value: List(1, 2, 3) Set Value: Set(Scala, Java, Python) Map Value: Map(one -> 1, two -> 2, three -> 3) Array Value: 4, 5, 6 Tuple Value: (42,Answer,true) Option Value: Some(I am here) Either Value: Right(42) Try Value: Success(5) Unit Value: () Null Value: nullOtras extensiones