| Scala | |
|---|---|
| Paradigmen: | objektorientiert, funktional |
| Erscheinungsjahr: | 2001 (Version 1)/2003 (Version 2) |
| Entwickler: | Martin Odersky / Labor für Programmiermethoden, École polytechnique fédérale de Lausanne |
| Aktuelle Version: | 2.7.1 (05. Mai 2008) |
| Typisierung: | statisch, stark |
| Einflüsse: | Java, ML, Haskell, Smalltalk |
| Betriebssystem: | plattformunabhängig |
| Lizenz: | Open Source, eigene, BSD-ähnlich |
| http://www.scala-lang.org | |
Scala ist eine funktionale und objektorientierte Programmiersprache. Sie wird seit 2001 (die aktuelle Version 2 seit 2003) am Labor für Programmiermethoden an der École polytechnique fédérale de Lausanne unter der Leitung von Martin Odersky entwickelt. Scala ist hauptsächlich dafür bekannt, die parallele Programmierung für Multikernprozessor-Systeme zu erleichtern.
Die Syntax der Sprache ähnelt in Teilen der von Java und ML. An ML ist die Syntax für Typannotationen und Deklarationen angelehnt; von Java wurde vor allem die Blocksyntax übernommen.
Als Laufzeitumgebung dient seit der Version 2 vor allem die Java-VM. Eine aktuelle Version für die .NET-CLR befindet sich in Entwicklung [1].
Hello, World! sieht in Scala so aus:
object HelloWorld extends Application {
println("Hello, world!")
}
Inhaltsverzeichnis |
Werte, Variablen und Methoden werden mittels Schlüsselwörtern val, var und def gefolgt von Typangaben deklariert bzw. definiert, z.B.:
val wert: Int = 42 var variable: Double = 3.14 def methode(parameter1: String, parameter2: Boolean): Unit
Scalas statisches Typsystem ist besonders im Vergleich zu anderen Sprachen auf der JVM sehr mächtig. Es bietet unter anderem Typinferenz, Polymorphie (generische Typen), Mehrfachvererbung durch Mixin-Komposition, und pfadabhängige Typen.
Scala ist statisch typisiert und nutzt Typinferenz zur Ableitung von Typen ohne explizite Typangabe, wie es vor allem aus funktionalen Programmiersprachen bekannt ist. Folgende Anweisungen erzeugen beide Werte vom Typ Boolean:
val wahr1: Boolean = true val wahr2 = true
In Scala wird zwischen Klassen und Traits unterschieden. Jede Klasse erweitert genau eine Superklasse und beliebig viele Traits. Traits unterscheiden sich von Klassen vor allem durch fehlende Konstruktorparameter. Anders als Interfaces in Java können Traits jedoch auch Methodenimplementierungen und Zustand enthalten.