Artikel

 
Mai 2009 | Artikel

Scala verändert die Java-Welt

(Link zum Artikel: http://www.it-republik.de/jaxenter/artikel/2318)

Eine skalierbare Sprache für die JVM

Text: Arno Haase
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
Scala ist eine ziemlich coole Sprache für die Java Virtual Machine, der neue Stern am Java-Himmel. Grund genug, sie in einer vierteiligen Artikelserie vorzustellen. Im ersten Teil geht es um die Grundzüge einer Sprache, die ausdrucksstark und dennoch statisch getypt ist.
Teil 1   Teil 2   Teil 3   Teil 4   

Ein Artikel kann natürlich nicht die komplette Sprache erklären, ja eigentlich nicht einmal ein Grundlagen-Tutorial sein – dafür ist hier einfach nicht genug Platz. Aber ich kann zeigen, was mir an Scala gefällt, und die Grundkonzepte vorstellen. Detaillierte Informationen gibt es auf der Scala-Homepage, insbesondere in der Sprachspezifikation. Für die Vertiefung sei das exzellente Buch "Programming in Scala" empfohlen.

Überblick

Scala hat eine Menge mit Java gemeinsam, was nicht weiter verwundert – schließlich läuft es auf der Java VM. Es hat dieselben primitiven Typen, und Dinge wie Annotationen, Exceptions oder Generics sind fast identisch. Der Hauptunterschied zu Java ist, dass Scala eine erweiterbare, skalierbare Sprache ist. In Java gibt es für viele Problemstellungen Bibliotheken – das funktioniert, ist aber in der Syntax oft etwas umständlich. Bei Skriptsprachen dagegen sind viele Features wie reguläre Ausdrücke oder Collection-Literale Teil des Sprachkerns und haben eine entsprechend einfache Syntax. So nützlich solch syntaktischer Zucker bei Skriptsprachen ist, erstreckt er sich jeweils nur auf die begrenzte Menge an Features, die direkter Bestandteil der Sprache sind. Aber was ist, wenn man Vektorarithmetik haben will? Oder Aktor-basierte Parallelverarbeitung?

Scala geht einen dritten Weg. Es hat einen relativ schlanken Sprachkern, bietet aber die Möglichkeit, Bibliotheken zu schreiben, die sich nahtlos in die Sprache einfügen und die kaum von eingebauten Sprachfeatures zu unterscheiden sind. Scala ist eine funktionale Sprache, d. h. Funktionen sind vollwertige Sprachelemente. Es gibt natürlich auch Closures als Sonderfall von Funktionen und man kann Funktionen teilweise evaluieren. Damit man möglichst viele Vorteile aus der funktionalen Programmierung ziehen kann, unterstützt Scala seiteneffektfreies Programmieren. Neben Variablen gibt es Konstanten, Pattern Matching, seiteneffektfreie Collection-Klassen, und Scala optimiert rekursive Funktionen (Tail Recursion). Die Sprache erzwingt aber nicht einen „reinen“ funktionalen Stil, sondern bietet ihn pragmatisch als eine Option von mehreren an. Außerdem ist Scala konsequent objektorientiert. Auch Zahlen sind Objekte, und die Unterscheidung zwischen int und java.lang.Integer entfällt. Es gibt auch kein static, weder für Felder noch für Methoden, stattdessen kann man neben Klassen auch benannte Objekte definieren. Darüber hinaus bietet Scala eine Vielzahl von ausdrucksstarken Sprachmitteln, mit denen man Bibliotheken schreiben kann, die sich wie eingebaute Sprachfeatures anfühlen. Und auf Basis dieser Features bringt Scala eine Reihe extrem eleganter und nützlicher Bibliotheken mit, z.B. eine Concurrency-Bibliothek auf Basis von Aktoren im Stile von Erlang.

Hallo Welt!

Doch genug der Vorrede – die Ärmel hochgekrempelt und auf zu einem ersten Programm. Man kann Scala auf der Kommandozeile kompilieren oder starten, aber mit einer IDE macht das Arbeiten besonders am Anfang natürlich mehr Spaß. Die Scala-Distribution enthält einen Interpreter, mit dem man interaktiv einzelne Befehle ausprobieren kann. Es gibt aber auch Plug-ins für die gängigen IDEs. Der erste Schritt besteht im Anlegen eines Scala-Projekts (Eclipse-Terminologie). In diesem Projekt legen wir die Datei HelloWorld.scala an, deren Endung .scala sie als Scala-Quelltext auszeichnet. In dieser Datei landet der Quelltext, der unser erstes Scala-Programm darstellt. Wenn wir dieses Programm starten (STRG+F11 in Eclipse), dann gibt es erwartungsgemäß Grüße aus:

  1. object HelloWorld extends Application {
  2. println ("Hallo Arno...")
  3. println ("... und hallo Welt")
  4. }

Scala kennt neben Klassen auch Objekte als direkte Sprachkonstrukte – Singletons, die unter ihrem Namen überall verfügbar sind und mit dem Schlüsselwort object definiert werden. Sie haben in etwa die Rolle, die static in Java hat. Hier interessiert uns zunächst nur, dass ein Objekt, das von Application erbt, direkt Scala-Code enthalten kann, den man dann als Programm starten kann. Semikolons sind in Scala optional, zumindest am Ende einer Zeile.

Teil 1   Teil 2   Teil 3   Teil 4   

andere Artikel dieser Serie


Anzeige

Kommentare

Gravatar Tomy 20.05.2009
um 12:31 Uhr
Auf mich wirkt Scala eher "dirty" und unlesbar. Mal wieder etwas für Leute die es "fast & dirty" mögen #zitieren
Gravatar Gabriele 20.05.2009
um 14:48 Uhr
Wo wird uns das noch hinführen, eine andere Sprache die von einer JVM ausgeführt wird. Das kann nur in Chaos enden... #zitieren
Gravatar Frank Kaiser 20.05.2009
um 15:19 Uhr
Diskussionen und immer wieder neue Sprachen. Wo soll das alles noch hinführen? #zitieren
Gravatar Marty 22.05.2009
um 07:55 Uhr
Also lieber alles beim alten lassen und keine weiterentwicklungen ?

schwachsinn...

es gibt viele gute Aenderungen und viele Sachen die v.a. in Java so was von verhunzt und umstaendlich sind. Ob jetzt genau Scala diese Problematiken angeht weiss ich nicht...

aber von vornerein etwas neues als Unbrauchbar abzustempeln ist ja schon reaktionaer....
#zitieren
Gravatar Traits 22.05.2009
um 11:09 Uhr
Hallo,

ich habe mir Scala auch schon angesehen und vermisse deswegen hier völlig die Erwähnung von Traits. Diese Code-Resuse-Units sind IMHO auch ein integraler Bestandteil von Scala unf sollten bei einem Scala-Overview-Artikel nicht feheln.
#zitieren
Gravatar Landei 22.05.2009
um 13:32 Uhr
@Tony: So kam es mir am Anfang auch vor, aber dem ist nicht so. Die Scala-Syntax ist *wesentlich* konsistenter als die von Java. Natürlich ist erst einmal ungewohnt, dass man viele unnötige Dinge (Typen bei Typinferenz, {}-Klammern für Methoden mit einer Anweisung, () für argumentlose Methoden usw.) einfach weglassen kann.
Scala ist wesentlich ausdrucksstärker und kompakter als Java, selbst wenn man damit nicht funktional programmiert.
#zitieren
Gravatar Redaktion 25.05.2009
um 08:28 Uhr
@Traits: Dies war nur der erste Streich, in einem der nächsten Teile dieser Artikelserie wird es auch um Traits gehen ;) #zitieren
Gravatar Trepper 10.06.2009
um 16:45 Uhr
Seit kurzem gibt es ein Forum für Scala-Programmierer: http://scala-forum.org #zitieren
Gravatar Jones 15.12.2009
um 23:03 Uhr
Scala ist eine geile Sprache. Wer glaubt, die bisherigen Sprachen wären nur ansatzweise gut, ist schief gewickelt. #zitieren

Anzeige

zurück zum Seitenanfang