Inhaltsverzeichnis | 8 |
Vorwort | 12 |
1 Einführung | 14 |
1.1 Was Führungskräfte über Scala wissen sollten | 16 |
1.2 Java-Scala-Integration | 17 |
1.3 Über dieses Buch | 18 |
1.4 Typographische und sonstige Konventionen | 19 |
2 Einrichten der Arbeitsumgebung | 22 |
2.1 Die Scala-Shell und die Kommandozeile | 22 |
2.1.1 Der Scala-Interpreter | 24 |
2.1.2 Die Scala-(De-)Compiler | 26 |
2.1.3 Der Dokumentationsgenerator | 29 |
2.2 Buildtools | 30 |
2.2.1 Das Maven-Scala-Plugin | 30 |
2.2.2 Simple Build Tool | 32 |
2.3 IDE-Support | 35 |
2.3.1 Eclipse | 35 |
2.3.2 NetBeans | 36 |
2.3.3 IntelliJ IDEA | 37 |
3 Grundlagen | 40 |
3.1 Ein kleines bisschen Syntax | 40 |
3.2 Imperative Programmierung | 52 |
3.3 Ein ausführbares Programm | 55 |
3.4 Annotations | 57 |
4 Reine Objektorientierung | 60 |
4.1 Klassen und Objekte | 60 |
4.1.1 Felder und Methoden | 60 |
4.1.2 Was Klassen sonst noch enthalten können | 73 |
4.1.3 Konstruktoren | 75 |
4.1.4 Enumerations | 78 |
4.1.5 Vererbung und Subtyping | 80 |
4.1.6 Abstrakte Klassen | 86 |
4.2 Codeorganisation | 91 |
4.2.1 Packages | 91 |
4.2.2 Package Objects | 92 |
4.2.3 Importe | 93 |
4.3 Traits | 95 |
4.3.1 Rich Interfaces | 96 |
4.3.2 Stapelbare Modifikationen | 101 |
4.4 Implicits und Rich-Wrapper | 108 |
5 Funktionales Programmieren | 114 |
5.1 Lazy Evaluation | 115 |
5.2 Funktionen und Rekursionen | 117 |
5.3 Higher-Order-Functions | 121 |
5.4 Case-Klassen und Pattern Matching | 127 |
5.4.1 Case-Klassen | 132 |
5.4.2 Versiegelte Klassen | 135 |
5.4.3 Partielle Funktionen | 137 |
5.4.4 Variablennamen für (Teil-)Pattern | 139 |
5.4.5 Exception Handling | 139 |
5.4.6 Extraktoren | 141 |
5.4.7 Pattern Matching mit regulären Ausdrücken | 143 |
5.5 Currysierung und eigene Kontrollstrukturen | 145 |
5.6 For-Expressions | 154 |
5.7 Typsystem | 160 |
5.7.1 Standardtypen | 160 |
5.7.2 Parametrischer Polymorphismus und Varianz | 161 |
5.7.3 Upper und Lower Bounds | 164 |
5.7.4 Views und View Bounds | 167 |
5.7.5 Context Bounds | 168 |
5.7.6 Arrays und @specialized | 168 |
5.7.7 Generalized Type Constraints | 171 |
5.7.8 Self-Type-Annotation | 173 |
5.7.9 Strukturelle und existenzielle Typen | 175 |
6 Die Scala-Standardbibliothek | 178 |
6.1 Überblick und das Predef-Objekt | 178 |
6.2 Das Collection-Framework | 183 |
6.3 Scala und XML | 189 |
6.4 Parser kombinieren | 193 |
6.5 Ein kleines bisschen GUI | 200 |
7 Actors – Concurrency und Multicore-Programmierung | 206 |
7.1 Ein Thread ist ein Actor | 207 |
7.2 Empfangen und Reagieren | 209 |
7.3 Dämonen und Reaktoren | 220 |
7.4 Scheduler | 222 |
7.5 Remote Actors | 224 |
8 Softwarequalität – Dokumentieren und Testen | 228 |
8.1 Scaladoc | 229 |
8.2 ScalaCheck | 234 |
8.2.1 Grundlagen | 234 |
8.2.2 Generatoren | 237 |
8.2.3 Automatisiertes Testen mit Sbt | 242 |
8.3 ScalaTest | 245 |
8.3.1 ScalaTest und JUnit | 246 |
8.3.2 ScalaTest und TestNG | 248 |
8.3.3 ScalaTest und BDD | 249 |
8.3.4 Funktionale, Integrations- und Akzeptanztests | 251 |
8.3.5 Die FunSuite | 253 |
8.4 Specs | 254 |
8.4.1 Eine Specs-Spezifikation | 255 |
8.4.2 Matchers | 257 |
8.4.3 Mocks mit Mockito | 261 |
8.4.4 Literate Specifications | 262 |
9 Webprogrammierung mit Lift | 266 |
9.1 Quickstart mit Lift | 267 |
9.2 Bootstrapping | 270 |
9.3 Rendering – Templates und Snippets | 275 |
9.4 Benutzerverwaltung und SiteMap | 277 |
9.5 Persistenz | 279 |
9.6 Implementierung der Snippets | 282 |
10 Leichtgewichtige Webprogrammierung mit Scalatra | 292 |
10.1 Quickstart mit Scalatra | 292 |
10.2 Der Final-Grade-Calculator | 294 |
11 Akka – Actors und Software Transactional Memory | 300 |
11.1 Quickstart mit Akka | 301 |
11.2 Der MovieStore | 302 |
11.3 User- und Session-Management | 306 |
11.4 Software Transactional Memory | 310 |
11.5 Client und Service | 313 |
Schlusswort | 318 |
Literaturverzeichnis | 320 |
Stichwortverzeichnis | 324 |