Variable

Einstieg
Typableitung (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.