Scala 101: Einführung
Zusammenfassung
Die Programmiersprache wird vorgestellt. Anhand von Beispielen wird ein Überblick über die wichtigsten Sprachelemente gegeben.
Die Programmiersprache "Scala"
Herzlich Willkommen zur zweiten Ausgabe des Scala Newsletters. Dies ist der erste Teil des Scala 101, einer Einführung in die Programmiersprache Scala.
Scala ist eine skalierbare Programmiersprache, die sich gut in die Java-Welt integriert. In den folgenden Abschnitten werden die wichtigsten Konzepte kurz angerissen. Detailierte Erklärungen werden in den nächsten Ausgaben der Reihe Scala 101 erscheinen.
Woher kommt Scala?
Scala wird an der Universität Lausanne entwickelt. Martin Odersky, ein Deutscher, ist hauptverantwortlich für die Weiterentwicklung der Sprache.
Beispielcode
Um Scala vorzustellen werden kleine Beispiele gezeigt. Ein kurzes, aber vollständiges Programm ist das typische "Hallo Welt":
Scala - kurz und knapp
Scala zeichnet sich durch einige Besonderheiten aus:
Integriert. Scalacode kann auf der Java VM ausgeführt werden. Mit Scala können bisheriger Java-Quellcode weiterverwendet werden. Statt das Rad neu zu erfinden setzt Scala auf etablierte Technologien auf.
Objektorientiert. Scala ist eine objektorientierte Programmiersprache. Die Möglichkeiten gehen jedoch über die von beispielsweise Java hinaus.
Funktional und Imperativ. Scala vereint Aspekte der funktionalen und imperativen Programmierung unter einem Dach. Der Programmierer kann je nach Aufgabe verschiedene Schwerpunkte in der Verwendung der Sprachmerkmale setzen.
Kompakt. Typischer Scala-Quellcode ist kürzer als der entsprechende Java-Quellcode. Dies erspart dem Programmierer Schreib- und Leseaufwand. Zum besseren Verständnis kann jedoch auch ausführlicherer Quellcode geschrieben werden; etwa in komplexen Programmteilen.
Erweiterbar. Scalas Syntax ist so entworfen worden, dass leicht Erweiterungen erstellt werden können, die sich in die Sprache integrieren. Mit der Sprache können Konstrukte erstellt werden, die den Schlüsselwörtern der Sprache ähneln. Scala eignet sich gut zur Erstellung von domänenspezifischen Sprachen (DSLs).
Was zeichnet Scala weiterhin aus?
Syntax
Scalas Syntax ist zum einen prägnant und zum anderen mächtig. Im Vergleich mit Java muss weniger Quellcode geschrieben werden, um die gleiche Idee zu verwirklichen.
object SyntaxDemo {
def isPrime(n: Int) = (1 to n).toList.count(n % _ == 0) == 2
def main(args: Array[String]): Unit =
(1 to 100).filter(isPrime).foreach(println)
}![]() | Anmerkung |
|---|---|
| Es gibt natürlich wesentlich bessere Mehoden zum Finden von Primzahlen als diese naive Implementierung. Das Beispiel soll zeigen, dass es möglich ist verständlichen und im Vergleich mit Java kürzeren Quellcode zu schreiben. |
Scala ist eine typsichere Sprache. Das bedeutet, dass für Variable, Parameter, usw. Typen festgelegt werden müssen. Oft ist eine solche Angabe jedoch redundant und könnte weggelassen werden. In Scala brauchen Sie nur noch die nötigsten Typangaben, Scala vervollständigt die ausgelassenen Angaben automatisch selbst. Diese Eigenschaft wird als Typfolgerung (engl. type inference bezeichnet).
Auf Wunsch können die optionalen Typangaben ausgeschrieben werden. Dies verbessert in komplizierten Programmteilen die Lesbarkeit. Außerdem hilft es dem Compiler die Typen komplexer Ausdrücke zu bestimmen.
Klassen, Module und Traits
In Java gibt es Klassen und Schnittstellen. In Scala gibt es Klassen, Module und Traits.
Klassen. Klassen in Scala sind Javas Klassen sehr ähnlich. Jedoch gibt es hier z.B. keine statischen Methoden oder Variablen.
Module. Scalas Module ähneln dem Entwurfsmuster "Singleton". Scalas Modulkonzept wird auch als Singleton object bezeichnet. Module werden in Scala durch das Schlüsselwort
objectgekennzeichnet. Zur Laufzeit gibt es immer nur eine Instanz eines Modules.Traits. In Java gibt es kein Konzept, das Traits ähnelt. Traits erlauben es, Funktionalität wie Bausteine zu einem größeren Konstrukt zusammenzusetzen (d.h. zu einer Klasse oder zu einem Modul).
case class
Die sogenannte "case class" ist eine Vereinfachung bestimmter Anwendungsfälle von Klassen. Oft werden Klassen benötigt, die bestimmte Eigenschaften für den lesenden Zugriff zur Verfügung stellen und bestimmte Operationen für diese Daten anbieten.
public class JavaPerson{
private final String firstname;
private final String lastname;
public JavaPerson(String firstname, String lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
public String getFirstname() {
return firstname;
}
public String getLastname() {
return lastname;
}
} Die obige Java-Klasse kann in einem Scala-Programm durch eine einfache
case class
ersetzt werden. Die folgende Klasse hat die gleiche Funktionalität wie die obige Java-Klasse:
Funktionen und Closures
In funktionalen Programmiersprachen spielen Funktionen eine zentrale Rolle. In imperativen Sprachen wie Java nehmen Daten diese Rolle ein. Scala verbindet beide Welten miteinander.
Scala erlaubt es, Funktionen zu referenzieren. Sie können beispielsweise als Parameter an andere Funktionen übergeben werden. Anonyme Funktionen sind ebenfalls möglich. Das folgende Beispiel demonstriert die Verwendung von Funktionen in Scala:
object FoodDemo {
val food = "Bananas" :: "Bred" :: "Orange juice" :: Nil
def main(args:Array[String]) = {
food.foreach(thing => println("Please buy " + thing))
}
}
Das Konstrukt
thing => println("Please buy " + thing)
ist eine (anonyme) Funktion, die für jedes Element der Liste
food
aufgerufen wird. Die Ausgabe des Programms ist:
Please buy Bananas
Please buy Bred
Please buy Orange juice
Actors
Scalas Standardbibliothek verfügt über ein elegantes Konzept zur parallelen Programmierung. Zwischen verschiedenen Akteueren werden Nachrichten hin- und hergeschickt. Die Nachrichten an einen Teilnehmer werden gesammelt und von diesem der Reihe nach abgarbeitet. Die Nachrichtenverarbeitung von zwei verschiedenen Akteueren kann parallel erfolgen.
Interessant ist, dass hier normalerweise keine Locks benötigt werden. Dies reduziert die Fehleranfälligkeit. Außerdem ist es so sehr einfach ein ereignisgesteuertes Programm zu erstellen.
case class Add(n:Int)
case class Substract(n:Int)
case class Print()
case class Shutdown()
class CalculatingActor extends Actor {
import Actor._
var result : Int = 0
def act() = loop{
react{
case Add(n:Int) => result = result + n
case Substract(n:Int) => result = result - n
case Print() => println(result)
case Shutdown() => exit()
}
}
} Dieser simple actor zeigt, wie Scalas Akteurskonzept die Entwicklung von asynchronen, nachrichtenbasierten Systeme vereinfachen kann. Im Beispiel werden Rechenaufträge erteilt, die asynchron ausgeführt werden.
Weiterführende Informationen
Webseiten
Die folgenden Webseiten enthalten wichtige Informationen zum Thema Scala bzw. zu verwandten Themen.
Scalas Internetseiten. Die Internetseiten von Scala enthalten vielfältige Informationen zu allerlei Aspekten der Sprache. Im Bereich Dokumentation sind die meisten der Dokumente verklinkt.
www.scala-lang.orgIBMs The busy Java developer's guide to Scala. In IBM developerWorks ist die Artikelserie "The busy Java developer's guide to Scala" enthalten. Hier werden in verschiedene Themen der Skalaprogrammierung erläutert.
IBMs The busy Java developer's guide to ScalaLift. Lift ist ein sehr elegantes Framework zur Entwicklung von modernen Internetanwendungen.
Lift - The Scala web framework.
Literatur
Dies ist eine Auflistung der Bücher, die zu Scala verfügbar sind. Einige der Bücher sind noch in der Entstehung. Sie werden jedoch bald verfügbar sein.
Programming in Scala. Martin Odersky, der Vater von Scala, hat an diesem Buch mitgearbeitet. Das Buch ist entsprechend tiefgehend und detailiert. Trotz der Dicke von über 700 Seiten ist das Buch aber lesenswert. Es ist allerdings weder für absolute Neulinge noch für das schnelle Lernen der Sprache zu empfehlen. Zum genauen Nachlesen und als Nachschlagwerk ist es jedoch hervorragend geeignet.
Das Buch ist sowohl aus Druckausgabe als auch als eBook erhältlich. Webseite des BuchesProgramming Scala: Tackle Multi-Core Complexity on the Java Virtual Machine. Das Buch soll Anfang Mai erscheinen und behandelt augenscheinlich insbesondere die Programmierung von MultiCore-Anwendungen. Ob es hält, was es verspricht muss sich dann zeigen.
Webseite des Buches.Beginning Scala. Beginning Scala ist ein weiteres Buch über Scala, das noch im Enstehen ist. Autor ist David Pollak, u.a. bekannt durch sein Scala-basiertes Webframework Lift. Meines Erachtens ist hier ein sehr gutes und verständliches Buch zu erwarten.
Webseite des Buches

![[Anmerkung]](../images/note.png)