Die Scala Entwicklungsumgebung L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung 1 Was ist drin? Die Scala-Entwicklungsumgebung enthält Die Scala-Shell: scala Zwei Compiler: scalac und fsc (Fast Scala Compiler) Die API Die Laufzeitumgebung Den Scala-Basar Wir arbeiten mit der Version 2.10.x. Scala gibt für die JVM und die CLR (.NET). Seit Scala 2.0 gibt es keine aktuelle Version für die CLR. L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung 2 Installation Kommandozeilenwerkzeuge Von http://www.scala-lang.org/downloads für Linux holen scala-2.9.1.final.tgz Mit md5sum vergleichen, Entpacken Umgebungsvariable PATH erweitern, sodass sie auf /prg/scala-2.9.1.final/bin zeigt. Testen: scala -version scalac -version L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung 3 Ohne Java geht nichts Die Compiler sind in Scala geschrieben, Die ‚Laufzeitumgebung‘ ist ein Wrapper für die JVM. Eine Voraussetzung für die Arbeit mit Scala ist ein JRE. Alle Java-Klassen können aus Scala heraus benutzt werden (und umgekehrt). L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung 4 Scala-Shell alias REPL REPL: Read-Evaluate-Print-Loop Scala-Befehle können eingetippt werden, die Shell führt sie aus und gibt das jeweilige Ergebnis mit Name undTypangabe aus. $ scala scala> println("Hallo, Scala") Hallo, Scala scala> 128*2 Res1: Int = 256 Scala> val os = System.getProperty("os.name") os: java.lang.String = Linux Scala> exit $ L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung 5 Scala-Skripte Eine Datei ohne Klasse wird als Skript aufgefasst. Kommandozeilenargumente sind als args verfügbar. dir.scala: val dir = new java.io.File(args(0)) val files = dir.list files.foreach(println) Dialog: $ scala dir.scala /bin mkdir ps ln uncompress ls ... $ L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung 6 Scala-Hauptprogramme In Scala können wir wie in Java mit class Klassen definieren. Ausführbare main-Methoden stehen aber immer in so genannten Singleton-Objekten. object Greet { def main(args: Array[String]){ println("Hello, " + args(0)) } } Singletons werden mit dem Schlüsselwort object definiert. Probieren: scala Greet.scala Christoph oder scalac Greet.scala; scala Greet Sebastian L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung 7 Die Compiler Der einfache Compiler scalac arbeitet wie andere Compiler. Der zweite Compiler fsc wird beim ersten Aufruf als Dienst gestartet und nicht beendet. Bei weiteren Aufrufen findet kein Neustart statt! L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung 8 Der Scala Bazaar Der Basar ist ein Paket-Manager mit dem neue Pakete bequem installiert werden und man seine Scala Entwicklungsumgebung aktualisieren kann. Beispiel: sbaz installed zeigt alle installierten Pakete an. Knabe: Wir benutzen stattdessen das BuildWerkzeug sbt. L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung 9 Die Scala-IDEs Es gibt Scala-Plugins für die IDEs IntelliJ IDEA: von Knabe benutzt Eclipse: Von scala-lang.org empfohlen Installation siehe http://www.scala-ide.org/ NetBeans L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung 10 Simple Build Tool alias sbt (Knabe) Build Tool: Reproduzierbarer Produktbau, bequeme Nutzung von Fremdbibliotheken. Installation: Siehe Hinweise WerkzeugInstallation Vorteile gegenüber Maven: • Typsichere Überprüfung der Build-Skripts • + Interaktive Konsole zur inkrementellen Nachkompilation mit unmittelbarer Ausführung • Hohe Anpassbarkeit, da Builds in einer Programmiersprache (Scala) konfiguriert werden können. L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung 11 sbt-Nutzung 1 (Knabe) Bsp.: http://www.scala-sbt.org/0.13/tutorial/Hello.html Hello-Projekt anlegen, füllen. Batch Mode: Kommandozeilenaufruf von Aktionen Bsp.: cd hello; sbt run package Interactive Mode: $ sbt > test Compiling … Testing ... > run Running HelloWorld Hallo zusammen! > exit $ L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung 12 sbt-Nutzung 2 (Knabe) Continuous Mode: ~Kommando Bsp.: ~test Führt Compile-Test nach jedem Speichern einer Quellcodeänderung durch. Interpreter Mode: console Führt Eingaben als Scala aus mit übersetzten Quellen und Dependencies. $ sbt console scala> val files = new java.io.File(″.″).list files: Array[String] = Array(Hi.scala~, Hi.scala, target) scala> files.foreach(println) Hi.scala~ Hi.scala target scala> :quit L.$ Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung 13 ScalaIDE-Nutzung 1 (Knabe) Doku: http://scala-ide.org/docs/ Wir folgen Anleitung „User Documentation for the Scala IDE 3.0.x“ Projekterzeugung: Im Navigator: New > Other... > Scala Wizards > Scala Project Erzeugt Scala-Projekt nach Eclipse-Konvention: ./bin: .class-Dateien ./src: Quelltextpakete für .java und .scala Anderes erzeugen: New > Scala Class New > Scala Object L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung 14 ScalaIDE-Nutzung 2 (Knabe) REPL-Ersatz in IDE: New > Scala Worksheet > Probe Eingeben und speichern: Es erscheint: object Probe { 2*3 //> res0: Int(6) = 6 val l = List("Berta", "Hans", "Tanja") //> l : List[String] = List(Berta, Hans, Tanja) l.reverse //> res1: List[String] = List(Tanja, Hans, Berta) } L. Piepmeyer: Funktionale Programmierung - Die Scala Entwicklungsumgebung 15