Sie sind hier
E-Book

Durchstarten mit Scala

Tutorial für Einsteiger (2. Aufl.)

AutorHeiko Seeberger
Verlagentwickler.press
Erscheinungsjahr2015
Seitenanzahl182 Seiten
ISBN9783868023435
FormatPDF/ePUB
KopierschutzWasserzeichen/DRM
GerätePC/MAC/eReader/Tablet
Preis19,99 EUR
Kaum eine andere Programmiersprache kombiniert derart elegant wie Scala die Vorzüge verschiedener Programmierparadigmen und ermöglicht gleichzeitig die vollständige Integrationsfähigkeit mit Java. Scala bringt nicht nur objektorientiertes und funktionales Programmieren zusammen, sondern erlaubt trotz statischer Typisierung das Schreiben von leichtgewichtigem und leicht verständlichem Code. Das Ergebnis ist eine Programmiersprache, mit der einfache Aufgaben auf einfache Weise bewerkstelligt werden können und die für komplexe Herausforderungen maßgeschneiderte Lösungen ermöglicht. Dieses Buch bietet allen Scala-Interessierten und Einsteigern einen praxisnahen und zielgerichteten Weg, Scala zu lernen. Dabei legt der Autor den Fokus bewusst auf die Praxis der Softwareentwicklung, um dem Leser die Vorteile von Scala möglichst direkt näher zu bringen. Im Rahmen eines durchgängigen Fallbeispiels wird der gesamte Zyklus der Softwareentwicklung abgedeckt: vom Einrichten der Entwicklungsumgebung über Experimentieren mit dem interaktiven Interpreter (REPL) und testgetriebene Entwicklung unter Verwendung von Testbibliotheken bis hin zur Verwendung von Bibliotheken wie Scalactic und Akka HTTP. Selbstverständlich wird der Leser dabei Schritt für Schritt mit allen Grundlagen von Scala vertraut gemacht.

Heiko Seeberger ist Dipl.-Physiker und ein international anerkannter Experte für Scala und Akka. Er hat mehr als zwanzig Jahre Erfahrung in der Beratung und Softwareentwicklung. Heiko Seeberger twittert unter @hseeberger und bloggt unter heikoseeberger.de.

Kaufen Sie hier:

Horizontale Tabs

Leseprobe

1 Warum Scala?

Ja, warum sollten wir uns eigentlich mit Scala beschäftigen? Mit Blick auf die schiere Vielzahl an Programmiersprachen eine berechtigte Frage. Wir können diese auch anders formulieren, und zwar: Welche Vorteile bringt Scala gegenüber anderen Programmiersprachen?

Mit der Antwort wollen wir es uns hier ein bisschen einfacher machen, indem wir ausschließlich die Java-Plattform betrachten. Das bedeutet, dass wir nur solche Programmiersprachen unter die Lupe nehmen, die auf der Java Virtual Machine (JVM) laufen. Diese Einschränkung halten wir deswegen für legitim, weil die Java-Plattform sehr weit verbreitet ist und gerade im Bereich der Unternehmensanwendungen eine durchaus dominante Stellung innehat. Gute Gründe hierfür sind – ohne Anspruch auf Vollständigkeit – das Write-once-run-everywhere-Prinzip1 sowie die große Menge an verfügbaren Bibliotheken für nahezu alle denkbaren Anwendungsfälle.

1.1 Was ist Scala?

Vor der Frage nach dem Warum steht erst einmal diejenige nach dem Was. Auf einen Satz kondensiert lautet unsere Antwort: Scala ist eine moderne und dennoch reife, objektfunktionale, praxisorientierte, statisch typisierte und trotzdem leichtgewichtige Sprache für die JVM, die vollständig kompatibel zu Java ist. Wir wollen im Folgenden kurz ein paar dieser Eigenschaften herauspicken und genauer erläutern. Alles Weitere bzw. sich ein Bild von Scala zu machen, überlassen wir dann dem Leser für den weiteren Verlauf dieses Buchs.

Scala wurde von Martin Odersky, Professor an der Schweizer Hochschule EPFL2, erfunden, der zuvor bereits an wichtigen konzeptionellen Neuerungen für Java gearbeitet hatte, zum Beispiel an den Generics3. Die erste Version wurde bereits 20044 veröffentlicht, sodass wir bereits auf über ein Jahrzehnt mit Scala zurückblicken können.

Anfangs, als die Nutzerbasis noch nicht so groß war, leistete sich Scala bei neuen Versionen – auch bei so genannten Minor-Releases – immer wieder binäre Inkompatibilitäten zu vorherigen Versionen. Aber spätestens seit der Version 2.9, die zeitlich ungefähr mit der Gründung der Firma Typesafe5, die kommerziell hinter Scala und anderen Technologien wie Akka6 und Play steht, zusammenfällt, ist das Geschichte: Seitdem sind alle Minor-Releases mit derselben Major-Release-Nummer binär kompatibel, also z. B. 2.9.1 und 2.9.2. Nur bei Major-Releases, die 18 Monate oder länger auseinanderliegen, wird es notwendig, ein gesamtes Projekt einschließlich aller Bibliotheken auf die neue Version zu heben. Aber auch das ist in der Regel ein Einfaches, weil dank der Community Builds7 die meisten populären Bibliotheken quasi gleichzeitig mit einem Major-Release von Scala für genau dieses veröffentlicht werden.

Scala kann also getrost als reife Sprache betrachtet werden. Zur weiteren Charakterisierung ist vermutlich der hybride Charakter der Sprache das hervorstechendste Merkmal: Scala ist einerseits objektorientiert8, und das sogar viel stringenter als Java. Andererseits ermöglicht Scala funktionale Programmierung9, also „so etwas mit Lambdas“, die ja spätestens seit Java 8 auch unter Java-Entwicklern steigende Bekanntheit genießen. Scala bietet nicht nur das Beste aus beiden Welten, sondern vereinigt die zwei Paradigmen weitreichend zu einer objektfunktionalen Sprache aus einem Guss.

Abschließend noch das aus unserer Sicht wichtigste Kriterium für den großen Erfolg von Scala: Wir können aus Scala heraus jeglichen Java-Code nutzen, egal ob unsere liebgewonnenen Bibliotheken für Logging, Persistenz etc. oder unsere eigenen Java-Projekte. Durch diese Abwärtskompatibilität müssen wir nicht bei Null anfangen, sondern können unsere bestehenden Java-Aktiva ver- und aufwerten.

1.2 Warum Scala statt Java?

Das führt uns direkt zur Frage, warum wir uns mit Scala beschäftigen sollten, wo es doch Java gibt. Die Antwort fällt uns sehr leicht, und wir können sie sehr deutlich formulieren: Im Vergleich zu Java können wir mit Scala sowohl produktiver arbeiten, als auch die Qualität steigern. Abgesehen davon macht das Programmieren mit Scala einfach mehr Spaß, wobei das natürlich eine subjektive Einschätzung aus unserer Sicht ist.

Zugegebenermaßen benötigen wir zunächst ein wenig Zeit, um mit Scala durchzustarten, aber die langfristigen Vorteile überwiegen mit Sicherheit den Nachteil des Lernaufwands, den jede neue Technologie mit sich bringt. Gerade Java-Programmierer sollten hierfür ein offenes Ohr haben, denn auch Java ist noch recht jung, weshalb nicht wenige von uns zuvor von anderen Programmiersprachen auf Java umgestiegen sind. Welches sind nun die Gründe dafür, dass Scala Produktivität und Qualität im Vergleich zu Java zu steigern vermag? Wir wollen hierfür die folgenden ins Feld führen: weniger Code und höheres Abstraktionsniveau.

Wie wir im weiteren Verlauf dieses Buchs sehen werden, benötigen wir mit Scala signifikant weniger Code als mit Java, um ein Programm zu realisieren, das dieselben Anforderungen erfüllt. Mit signifikant meinen wir mindestens eine Reduktion von 50 Prozent, möglicherweise bzw. situativ sogar bis zu 80 Prozent.

Es ist zwar richtig, dass moderne Java-Entwicklungsumgebungen beim Schreiben eines großen Teils des eingesparten Codes sehr gut unterstützen können; man denke zum Beispiel an Funktionen zur Erzeugung von Zugriffsmethoden – also Getter und Setter – wie sie jede moderne integrierte Entwicklungsumgebung (IDE) bietet. Somit sind wir beim Codeschreiben nicht unbedingt schneller. Aber wenn wir an unseren Alltag als Programmierer denken, dann werden die meisten von uns feststellen, dass wir insgesamt mehr Zeit darauf verwenden, Code zu lesen und zu verstehen, als zu schreiben. Das betrifft nicht nur fremden Code, den wir übernehmen oder warten dürfen, sondern auch eigenen, den wir vor Wochen oder gar Monaten geschrieben haben und dessen Verständnis uns heute einiges abverlangt.

Es gibt Untersuchungen10, die belegen, dass die Geschwindigkeit, wie schnell wir Code lesen und verstehen können, ganz entscheidend von der Codemenge bestimmt wird. Wenn wir zum Beispiel an eine typische JavaBean denken, die quasi nur einen Datencontainer für eine Handvoll Properties darstellt, dann sehen wir uns einer gewaltigen Menge an semantisch wenig wertvollem Code gegenüber: Getter, die nur ein privates Feld zurückgeben. Oft auch Setter, die nur ein privates Feld verändern. Vermutlich auch mehrere Konstruktoren, mit denen alle oder zumindest einige der Felder initialisiert werden können. Und nicht selten auch noch Implementierungen der Methoden equals, hashCode und toString. Wenn wir nun diesen Code lesen und verstehen wollen, dann müssen wir im Verstand einen Filter aktivieren, der all den überflüssigen Kitt ausblendet und nur die eigentliche Intention durchlässt.

Ein explizites Beispiel gefällig? Wie wäre es mit einer Klasse für eine Person, die Vor- und Nachname haben soll. Im Vorgriff auf die Prinzipien der funktionalen Programmierung soll diese Person unveränderlich sein, d. h. einmal erzeugt können deren Attribute nicht mehr verändert werden. Dieses Prinzip des Immutable Object11 ist natürlich auch in Java bekannt, nicht erst seit dem Buch „Effective Java“12 von Joshua Bloch. Zunächst zeigen wir den Java-Code, bei dem die Methoden equals und hashCode von der Entwicklungsumgebung generiert wurden:

public class Person {
private final String firstName;
private final String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
if (firstName != null ?
!firstName.equals(person.firstName) :
person.firstName != null) return false;
if (lastName != null ?
!lastName.equals(person.lastName) :
person.lastName != null) return false;
return true;
}
@Override
public int hashCode() {
int result = firstName != null ? firstName.hashCode() : 0;
result =
31 * result + (lastName != null ? lastName.hashCode() : 0);
return result;
}
}

Und nun zum Vergleich der äquivalente Scala-Code, der wirklich funktional vollständig identisch ist, wie wir im Verlauf dieses Buchs noch sehen werden:

case class Person(firstName: String, lastName: String)

Nur eine einzige Codezeile in Scala im Vergleich zu – je nachdem wie wir zählen – zwanzig oder mehr in Java. Das liegt daran, dass wir nicht all die kleinen Details wie zum Beispiel die Zugriffsmethoden oder equals und hashCode ausprogrammieren müssen, sondern der Scala-Compiler diese Arbeit für uns macht. Zwar haben gerade erfahrene Java-Entwickler einen besonders gut geschulten kognitiven Filter für irrelevante Details, sodass wir beim Geschwindigkeitsvergleich für Lesen und Verstehen natürlich nicht von einem Verhältnis 1:20 ausgehen dürfen. Aber...

Blick ins Buch
Inhaltsverzeichnis
Inhaltsverzeichnis5
Vorwort9
1Warum Scala?11
1.1Was ist Scala?11
1.2Warum Scala statt Java?12
1.3Warum Scala statt Groovy, Clojure und Co?16
2Entwicklungsumgebung17
2.1Kommandozeilenwerkzeuge17
2.1.1scalac18
2.1.2scala19
2.1.3scaladoc20
2.2sbt21
2.3IDE24
3Das Fallbeispiel ScalaTrain27
4Erste Gehversuche in der REPL29
4.1Variablen29
4.1.1Unveränderliche Variablen29
4.1.2Veränderliche Variablen31
4.2Methoden31
4.2.1Alles hat ein Ergebnis32
4.2.2Unit-Methoden33
4.3Funktionen34
5Grundlagen der Objektorientierung37
5.1Vorbereitung: Projekt initialisieren37
5.2Klassen39
5.2.1Klassenparameter und Konstruktoren39
5.2.2Felder41
5.2.3Methoden44
5.2.4Benannte Argumente und Standardwerte48
5.3Pakete und Sichtbarkeit49
5.3.1Verschachtelte Pakete49
5.3.2Imports51
5.3.3Sichtbarkeit53
5.4Singleton Objects53
5.4.1Companion Objects54
5.4.2Predef54
5.5Case Classes55
5.6Projektcode: aktueller Stand58
6Testen von Scala-Programmen59
6.1 Testabdeckung mit scoverage59
6.2Unit Tests mit ScalaTest60
6.2.1WordSpec61
6.2.2Matcher62
6.3Testdaten mit ScalaCheck64
6.4Projektcode: aktueller Stand67
7Erste Schritte mit FP69
7.1Scala Collections69
7.1.1Klassenhierarchie70
7.1.2Collection-Instanzen erzeugen71
7.1.3Typparameter72
7.1.4Tupel73
7.1.5Unveränderliche und veränderliche Collections74
7.1.6Collections in ScalaTrain76
7.2Funktionale Collections77
7.2.1Funktionsliterale77
7.2.2Funktionstypen79
7.2.3Funktionale Collections in ScalaTrain81
7.2.4„map“, „flatMap“ und „filter“ im Detail84
7.3For-Ausdrücke und For-Schleifen87
7.3.1For-Ausdrücke89
7.3.2For-Schleifen und foreach92
7.4Projektcode: aktueller Stand93
8Vererbung und Traits95
8.1Vererbung95
8.1.1Unterklassen mit „extends“ definieren95
8.1.2Felder und Methoden überschreiben97
8.1.3Abstrakte Klassen99
8.1.4Scala-Typhierarchie103
8.2Traits105
8.2.1Traits hineinmixen106
8.2.2Linearisierung108
8.2.3Beispiel: „Ordered“ implementieren110
8.2.4Einschub: By-Name Parameters112
8.3Projektcode: aktueller Stand116
9Pattern Matching119
9.1Match-Ausdrücke119
9.2Welche Patterns gibt es?120
9.2.1Wildcard Pattern120
9.2.2Constant Pattern120
9.2.3Variable Pattern und Typed Pattern121
9.2.4Tuple Pattern121
9.2.5Constructor Pattern121
9.2.6Sequence Pattern122
9.3Pattern Guards und Variable Binding123
9.4Pattern Matching außerhalb von Match-Ausdrücken124
9.5Projektcode: aktueller Stand126
10Implicits129
10.1Implicit Conversions129
10.1.1Implicit Conversions zum Expected Type130
10.1.2Implicit Conversions des Receivers134
10.2Implicit Classes134
10.3Implicit Parameters136
10.4Type Classes139
10.5Projektcode: aktueller Stand142
11Zielbahnhof – Fortgeschrittene Konzepte145
11.1Rekursion145
11.2Upper Bounds und Context Bounds148
11.2.1Einschub: Package Objects148
11.2.2Einschub: Varianz149
11.2.3Upper Bounds150
11.2.4Context Bounds151
11.3Vertiefung objektfunktionale Programmierung153
11.3.1Problemstellung153
11.3.2Lösungsansatz154
11.3.3Etappen und Teilstrecken156
11.3.4Verbindungen ermitteln158
11.4Projektcode: aktueller Stand160
12Scala-Bibliotheken163
12.1Validieren mit Scalactic163
12.2Akka HTTP168
12.3Projektcode: finaler Stand174
Stichwortverzeichnis179

Weitere E-Books zum Thema: Programmiersprachen - Softwareentwicklung

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

Programmieren lernen in PHP 5

E-Book Programmieren lernen in PHP 5
Format: PDF

Mit der Version 5 erreicht PHP einen bemerkenswerten Reifegrad, der PHP zu einer festen Größe in der Welt der Webprogrammierung macht. Gerade die leichte Erlernbarkeit macht PHP zur idealen…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Weitere Zeitschriften

FREIE WERKSTATT

FREIE WERKSTATT

Die Fachzeitschrift FREIE WERKSTATT berichtet seit der ersten Ausgaben 1994 über die Entwicklungen des Independent Aftermarkets (IAM). Hauptzielgruppe sind Inhaberinnen und Inhaber, Kfz-Meisterinnen ...

care konkret

care konkret

care konkret ist die Wochenzeitung für Entscheider in der Pflege. Ambulant wie stationär. Sie fasst topaktuelle Informationen und Hintergründe aus der Pflegebranche kompakt und kompetent für Sie ...

Der Steuerzahler

Der Steuerzahler

Der Steuerzahler ist das monatliche Wirtschafts- und Mitgliedermagazin des Bundes der Steuerzahler und erreicht mit fast 230.000 Abonnenten einen weitesten Leserkreis von 1 ...

Deutsche Hockey Zeitung

Deutsche Hockey Zeitung

Informiert über das nationale und internationale Hockey. Die Deutsche Hockeyzeitung ist Ihr kompetenter Partner für Ihren Auftritt im Hockeymarkt. Sie ist die einzige bundesweite Hockeyzeitung ...