Scala

von Paul Vorbach, 27.11.2013Kommentare

Ich bin seit rund zwei Jahren ein großer Fan der Programmiersprache Scala. Ich schreibe hier mal ein paar Stichpunkte auf, warum es sich lohnt, die Sprache näher zu betrachten.

Funktional und objektorientiert

Fast jeder Prozessor, der heute verkauft wird, hat mehr als einen Core. Sogar der Prozessor in meinem Smartphone hat zwei Kerne. Wer schon einmal versucht hat, mit Sprachen wie C++ oder Java ein Programm zu schreiben, das mehrere Kerne zum Schwitzen bringt, wird auch schon einmal eine Race Condition oder einen Deadlock erlebt haben.

Dagegen gibt es natürlich Mittel und Wege, die aber die Entwicklung von nebenläufigem Code ziemlich anstrengend machen können.

Einfacher geht es über funktionale Programmierung. Hier sind Funktionen in der Regel frei von Seiteneffekten. Dadurch ist die Reihenfolge egal, in der Funktionen aufgerufen werden. Außerdem gibt es in den meisten funktionalen Sprachen keine Variablen. Was einmal einen Wert hatte, behält diesen Wert auch. Damit können Objekte von jeder Stelle aus referenziert werden, ohne dass man etwas kaputt machen kann. Die Objekte können sich ja nicht ändern. Weil es aber nicht immer einfach ist, Algorithmen ohne Variablen zu schreiben, bringt Scala diese trotzdem mit und lässt dem Programmierer die Wahl, was er nutzen möchte.

An vielen Programmiersprachen stört mich jedoch, dass sie keine Objektorientierung mitbringen. Hier spielt Scala seine Stärken aus. Klassen und Vererbung sind mit an Bord, was sehr beim Strukturieren eines Programms hilft.

Syntax

Scala hat im Vergleich zu anderen statisch typisierten Sprachen eine sehr angenehme Syntax. Wer sich schon immer daran gestört hat, in Java jede noch so kleine Hilfsvariable mit einem Typ versehen zu müssen, wird den Wert der Typinferenz in Scala lieben. Bei einer Zuweisung wird einfach geschaut, welchen Typ der Wert hat, der zugewiesen wird.

Weitere Konzepte wie beispielsweise Case Classes und Pattern Matching helfen dabei, verständlicheren Code zu schreiben – Scala-Kenntnisse vorausgesetzt.

Asynchroner Code durch Futures

In Scala lässt sich sehr einfach asynchroner Code schreiben. Darauf will ich gar nicht so genau eingehen, da es den Rahmen hier sprengen würde. Das folgende Beispiel spricht für sich.

val f = Future {
  // Hier könnte eine lange Berechnung, eine Datenbankabfrage
  // oder ein HTTP-Request stehen
}

f.onComplete {
  case Success(result) =>
    // Hier etwas mit dem Ergebnis anstellen
  case Failure(err) =>
    // Hier den Fehler behandeln
}

Futures in Scala

Wer sich genauer dafür interessiert, dem empfehle ich den kostenlosen Online-Kurs „Principles of Reactive Programming“ auf Coursera. Wichtig ist, dass man die Callback-Hölle von JavaScript/Node.js sehr leicht vermeiden kann und dass Scalas Futures auch parallel ausgeführt werden können.

JVM

Ja, richtig gelesen. Ein großer Vorteil von Scala ist, dass es auf der Java-VM läuft. In einer Zeit in der die Java-VM eher durch Sicherheitslücken auf sich aufmerksam macht, mag das seltsam klingen. Außerhalb des Browsers handelt es sich trotzdem um ein großartiges Stück Software. Und: Das wichtigste Betriebssystem der näheren Zukunft, Android, setzt auf eine Java-VM.

Außerdem lässt sich jede Java-Bibliothek verwenden. Auch Scala-Programme können aus Java heraus aufgerufen werden. Praktisch.

Nachteile

Der größte Nachteil von Scala ist die hohe Einstiegshürde und die lange Lernkurve. Bis man die Sprache voll verstanden hat und einsetzen kann. Allerdings kann man sehr schnell mit einem kleineren Funktionsumfang produktiv werden. Dann hat man eine Alternative zu Java zur Hand, die einem einiges an Schreibarbeit abnimmt.

Außerdem kann einen die schiere Fülle an Möglichkeiten manchmal in den Wahnsinn treiben. Jedes Problem lässt sich auf unzählige Arten lösen und man kann unendlich viel Zeit damit verbringen, Code noch eleganter zu formulieren.

Natürlich gibt es noch weitere Nachteile, aber die Fallen mir jetzt natürlich nicht ein ;). Ich hoffe, ich habe jemanden neugierig machen können.

Material