Samstag, 28. März 2009

Scala ist auch eine Oper

... aber natürlich vor allem eine funktionale, objektorientierte Programmiersprache für die Java Virtual Machine :-)

Scala hat das Zeug dazu, die nächste große Sprache nach bzw. neben Java zu werden. Viele Ausdrücke lassen sich in Scala einfacher und kürzer als in Java schreiben, dennoch bleibt die statische und starke Typisierung wie bei Java erhalten. Ein großes Plus ist zudem die nahtlose Integration mit den unzähligen bestehenden Java-Bibliotheken. Und Scala ist nicht wirklich neu und nur irgendwie gerade cool, sondern bereits acht Jahre alt und stabil.

Zum Einstieg verwendet man am besten Eclipse 3.4 (das "Classic"- oder "Java EE"-Paket). Ein JDK 5.0 oder neuer sollte bereits installiert sein. Nun fehlt nur noch das Scala-Plugin, das man in Eclipse im Menü Help > Software Updates... mit der Update-URL

http://www.scala-lang.org/scala-eclipse-plugin

herunterladen lässt.

Wechselt man in die Scala-Perspektive, kann man unter File > New ein neues "Scala Project" anlegen. Wie aus Java gewohnt legt man ein Paket an und in diesem Paket dann ein "Scala Object" (!). Richtig gelesen, Scala unterstützt nicht nur Klassen, sondern auch einzelne Objekte. Wenn wir dieses Objekt von Application erben lassen, entspricht das der main-Methode in Java:


Scala bietet Typinferenz, d.h. man muss beim Deklarieren einer Variablen nicht zwingend den Typ angeben, wenn Scala diesen aus dem Kontext eindeutig ableiten kann. Die Variable ist dann trotzdem zur Übersetzungszeit typsicher, man kann also keine inkompatiblen Werte zuweisen:


Wie bei funktionalen Sprachen üblich, liegt eine der Stärken in der Listenverarbeitung. Listen können mit einer Java-ähnlichen Syntax angelegt werden (es geht auch funktionaler, siehe erster Screenshot):

val früchte = List("Äpfel", "Birnen", "Orangen")

Entweder kann man die Liste dann mit einer Java 5-ähnlichen for-each-Schleife ausgeben:

for (frucht <- früchte) { println(frucht) }

Oder man nutzt ein anonymes Funktionsliteral, eine sogenannte Funktion höherer Ordnung, die man als Wert an die foreach-Methode der Liste übergibt:

früchte.foreach(f => println(f))

Da man den Punktoperator beim Methodenaufruf weglassen darf und println nur ein Argument erwartet, geht das auch noch kürzer:

früchte foreach println

Und immer daran denken: Auch wenn das so langsam nach einer Skriptsprache aussieht (und tatsächlich ähnlich schnell programmiert werden kann), haben wir hierbei statische, starke, vom Compiler geprüfte Typisierung!

Soweit fürs Erste, das sollte als Appetitanreger reichen :-)

Kommentare:

  1. Vielen Dank für die kurze Anleitung. Hast Du das mal mit Eclipse 3.5 auf dem Mac versucht? Ich hab das jetzt auf mehreren Maschinen mal probiert und jedesmal beim erstellen eines neuen Objects gibt eine NPE in Eclipse im Wizard. Naja, ich versuch es nochmal mit der 3.4 Version und hoffe das es dort klappt.

    AntwortenLöschen
  2. (Sorry für die späte Antwort, aber Urlaub musste auch mal sein :-)
    Unabhängig von Eclipse 3.4/3.5 scheint das aktuelle Eclipse-Plugin für Scala 2.7.6 nicht mehr mit Java 5 zu laufen (es wird Java 6-API verwendet). Oder tritt die NPE auch mit Java 6 auf? Falls ja, unter welchem Mac OS X, 10.5 oder 10.6?

    AntwortenLöschen