Scala-Datentypen
Die von Scala unterstützten Hauptdatentypen umfassen Basistypen, Sammlungstypen und spezielle Typen.
Die folgende Tabelle listet die von Scala unterstützten Datentypen auf:
| Typkategorie | Datentyp | Beschreibung | Tatsächliche Klasse in der Scala-Standardbibliothek |
|---|---|---|---|
| Basistypen | Byte | 8-Bit-Ganzzahl mit Vorzeichen, Wertebereich von -128 bis 127 | scala.Byte |
| Basistypen | Short | 16-Bit-Ganzzahl mit Vorzeichen, Wertebereich von -32768 bis 32767 | scala.Short |
| Basistypen | Int | 32-Bit-Ganzzahl mit Vorzeichen, Wertebereich von -2147483648 bis 2147483647 | scala.Int |
| Basistypen | Long | 64-Bit-Ganzzahl mit Vorzeichen, Wertebereich von -9223372036854775808 bis 9223372036854775807 | scala.Long |
| Basistypen | Float | 32-Bit-IEEE-754-Gleitkommazahl mit einfacher Genauigkeit | scala.Float |
| Basistypen | Double | 64-Bit-IEEE-754-Gleitkommazahl mit doppelter Genauigkeit | scala.Double |
| Basistypen | Char | 16-Bit-Unicode-Zeichen ohne Vorzeichen, Wertebereich von U+0000 bis U+FFFF | scala.Char |
| Basistypen | String | String-Typ, der eine Zeichenfolge darstellt | java.lang.String |
| Basistypen | Boolean | Boolescher Typ, Werte sindtrueoderfalse | scala.Boolean |
| Sammlungstypen | List | Unveränderliche verkettete Liste | scala.collection.immutable.List |
| Sammlungstypen | Set | Unveränderliches Set | scala.collection.immutable.Set |
| Sammlungstypen | Map | Unveränderliche Sammlung von Schlüssel-Wert-Paaren | scala.collection.immutable.Map |
| Sammlungstypen | Array | Veränderbares Array | scala.Array |
| Sammlungstypen | Tuple | Unveränderlicher Container, der Elemente unterschiedlicher Typen enthalten kann | scala.TupleN |
| Sammlungstypen | Option | Repräsentiert einen Container, der einen Wert enthalten oder leer sein kann | scala.Option |
| Sammlungstypen | Either | Repräsentiert einen von zwei möglichen Werttypen | scala.util.Either |
| Sammlungstypen | Try | Container zur Handhabung von Operationsergebnissen, die erfolgreich sein oder fehlschlagen können | scala.util.Try |
| Spezielle Typen | Unit | Stellt keinen Wert dar, entspricht dem von Javavoid | scala.Unit |
| Spezielle Typen | Null | Singleton-Objekt, das den Nullwert für alle Referenztypen darstellt | scala.Null |
| Spezielle Typen | Nothing | Stellt keinen Rückgabewerttyp dar, ist ein Untertyp aller Typen | scala.Nothing |
| Spezielle Typen | Any | Obertyp aller Typen | scala.Any |
| Spezielle Typen | AnyRef | Obertyp aller Referenztypen, entspricht dem von JavaObject | scala.AnyRef |
In Scala sind alle Datentypen Objekte.
Scala hat nicht das Konzept primitiver Typen wie Java. Obwohl Scalas grundlegende Datentypen (wie Int, Double usw.) syntaktisch ähnlich wie Javas primitive Typen aussehen, sind sie tatsächlich Objekte. Das bedeutet, dass Sie Methoden auf diesen Typen aufrufen können.
Zum Beispiel ist der Typ Int in Scala tatsächlich eine Instanz der Klasse scala.Int, und scala.Int ist eine finale Klasse, die von AnyVal erbt. AnyVal ist eine spezielle Klasse in Scala, die Werttypen repräsentiert.
Das Folgende ist ein vollständiges Scala-Programm, das die Verwendung verschiedener Datentypen demonstriert:
Code der Datei DataTypeExamples.scala:
def main(args: Array[String]): Unit = {
// Grundlegende Typen
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
// Sammlungstypen
val listValue: List[Int] = List(1, 2, 3)
val setValue: Set[String] = Set("Scala", "Java", "Python")
val mapValue: Map[String, Int] = Map("eins" -> 1, "zwei" -> 2, "drei" -> 3)
val arrayValue: Array[Int] = Array(4, 5, 6)
val tupleValue: (Int, String, Boolean) = (42, "Antwort", wahr)
val optionValue: Option[String] = Some("Ich bin hier")
val eitherValue: Either[String, Int] = Right(42)
val tryValue: Try[Int] = Try(10 / 2)
// Spezielle Typen
val unitValue: Unit = ()
val nullValue: String = null
val nothingValue: Nothing = throw new RuntimeException("Nothing-Wert")
// Alle Werte ausgeben
println(s"Byte-Wert: $byteValue")
println(s"Short-Wert: $shortValue")
println(s"Int-Wert: $intValue")
println(s"Long-Wert: $longValue")
println(s"Float-Wert: $floatValue")
println(s"Double-Wert: $doubleValue")
println(s"Char-Wert: $charValue")
println(s"String-Wert: $stringValue")
println(s"Boolean-Wert: $booleanValue")
println(s"List-Wert: $listValue")
println(s"Set-Wert: $setValue")
println(s"Map-Wert: $mapValue")
println(s"Array-Wert: ${arrayValue.mkString(", ")}")
println(s"Tuple-Wert: $tupleValue")
println(s"Option-Wert: $optionValue")
println(s"Either-Wert: $eitherValue")
println(s"Try-Wert: $tryValue")
println(s"Unit-Wert: $unitValue")
println(s"Null-Wert: $nullValue")
// nothingValue wird nicht ausgegeben, weil es eine Ausnahme auslöst
}
}
Mit dem scalac-Compiler kompilieren und mit dem Befehl scala ausführen:
scalac DataTypeExamples.scala scala DataTypeExamples
Ausgabeergebnis:
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: nullWeitere Erweiterungen