Variable
EinstiegTypableitung (engl. type inference)
Einstieg
Die Deklaration einer Variable beginnt mit den Schlüsselwörtern
var, val oder lazy val. Anschließend wird
durch einen Doppelpunkt getrennt der Typ der Variablen angegeben. Nach der
Typangabe kann/muss nach einem Gleichheitszeichen "=" eine
Wertzuweisung erfolgen.
var auto: String = "BMW"
val name1: Int = 3
lazy val calcuated: Int = 23*63+3
Mit dem Schlüsselwort var werden Variable definiert,
deren Wert beliebig oft verändert werden kann. Dementgegen werden mit dem
Schlüsselwort val unveränderliche Variablen
definiert. Nach der ersten Zuweisung (bei der Deklaration) kann eine unveränderliche Variable nicht mehr
verändert werden. Die Zuweisung der val-Variablen einer
Klasse erfolgt bei dessen ersten Verwendung.
Mit den beiden Schlüsselwörtern
lazy val werden auch unveränderliche Variable definiert,
deren Wertezuweisung erst dann erfolgt, wenn die Variable zum ersten Mal verwendet
wird. Dies ist z.B. sinnvoll, wenn die Belegung einer Variablen mit einer
zeitaufwendigen Berechnung erfolgt und jedoch es nicht sicher ist, dass die
Variable überhaupt verwendet wird.
Für die funktionale Programmierung mit Scala gilt, dass wen möglich,
unveränderliche Variablen (also mit val definiert) verwendet
werden. Ein Vorteil dieser Vorgehensweise liegt in der nebenläufigen Programmierung.
Wenn Variablen sich nicht verändern können, besteht auch nicht das
Problem der race condition1. Die aufwendige
Synchronisation des Variablenzugriff entfällt damit in Scala.
Typableitung (engl. type inference)
In Scala braucht man meist nicht anzugeben, von welchem Typ
eine Variable ist.
Der Scala Compiler ist sehr oft in der Lage
den Typ einer Variablen aus dem umgebenden Kontext abzuleiten
und verzichtet darauf, dass dieser expliziert angegeben wird.
Sieht man sich folgende Variablendefinition an, ist sofort klar,
dass es sich um eine Int Variable handeln muss.
Da auch der Compiler dies so erkennt, muss der Typ nicht explizit
angegeben werden.
val myInt = 42
Da oft die Typangaben bei der Variablendefinition fehlen, sieht Scala Quelltext oft aus als handele es sich um eine dynamisch typisierte Sprache, was Scala definitiv nicht ist.
1 Unter race condition versteht man das Problem, das zwei oder mehrere threads unsynchronisiert auf gleiche Variablen lesend und schreibend zugreifen.