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 tipoTipo de datosDescripciónClase real en la biblioteca estándar de Scala
Tipo básicoByteEntero con signo de 8 bits, rango de valores de -128 a 127scala.Byte
Tipo básicoShortEntero con signo de 16 bits, rango de valores de -32768 a 32767scala.Short
Tipo básicoIntEntero con signo de 32 bits, rango de valores de -2147483648 a 2147483647scala.Int
Tipo básicoLongEntero con signo de 64 bits, rango de valores de -9223372036854775808 a 9223372036854775807scala.Long
Tipo básicoFloatNúmero de coma flotante de precisión simple IEEE 754 de 32 bitsscala.Float
Tipo básicoDoubleNúmero de coma flotante de doble precisión IEEE 754 de 64 bitsscala.Double
Tipo básicoCharCarácter Unicode sin signo de 16 bits, rango de valores de U+0000 a U+FFFFscala.Char
Tipo básicoStringTipo de cadena, representa una secuencia de caracteresjava.lang.String
Tipo básicoBooleanTipo booleano, cuyo valor estrueofalsescala.Boolean
Tipo de colecciónListLista enlazada inmutablescala.collection.immutable.List
Tipo de colecciónSetColección inmutablescala.collection.immutable.Set
Tipo de colecciónMapColección inmutable de pares clave-valorscala.collection.immutable.Map
Tipo de colecciónArrayArreglo mutablescala.Array
Tipo de colecciónTupleContenedor inmutable que puede contener elementos de diferentes tiposscala.TupleN
Tipo de colecciónOptionRepresenta un contenedor que puede contener un valor o estar vacíoscala.Option
Tipo de colecciónEitherRepresenta uno de dos posibles tipos de valorscala.util.Either
Tipo de colecciónTryContenedor para manejar resultados de operaciones que pueden ser exitosas o fallidasscala.util.Try
Tipo especialUnitRepresenta la ausencia de valor, equivalente a void en Javavoidscala.Unit
Tipo especialNullObjeto singleton, representa el valor nulo de todos los tipos de referenciascala.Null
Tipo especialNothingRepresenta el tipo sin valor de retorno, es subtipo de todos los tiposscala.Nothing
Tipo especialAnySupertipo de todos los tiposscala.Any
Tipo especialAnyRefSupertipo de todos los tipos de referencia, equivalente a Object en JavaObjectscala.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:

object DataTypeExamples {
  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: null
Otras extensiones