Die Programmiersprache Scala

Werbung
Veranstaltungsnummer: 18.163
Dozent: Prof. Dr. Heinz Züllighoven
Sommersemester 2008
Betreuer: Dr. Axel Schmolitzky
Die Programmiersprache Scala
Simon Gerlach,
Johannes Kuhlmann
03.06.2008
Ausgewählte Themen der Softwaretechnik
1
Übersicht
Historisches
Status, Rechtfertigung
Eigenschaften
Interaktion mit Java
Typsystem
Syntax
03.06.2008
Ausgewählte Themen der Softwaretechnik
2
1
Historisches
Entwickelt an der École Polytechnique Fédérale
de Lausanne (EPFL), Schweiz
Forschungsprojekt
Schlüsselfigur: Prof. Martin Odersky
Verlauf
in Entwicklung seit 2001
erstes Release im Januar 2004
Version 2 im März 2006
aktuell ist Version 2.7.1 vom 5.5.2008
03.06.2008
Ausgewählte Themen der Softwaretechnik
3
Historisches: Martin Odersky
1989 Doktor an der ETH Zürich
Ab 1989 am IBM T. J. Watson Research
Center
Ab 1991 an der Yale University
Ab 1993 Professor an der Uni Karlsruhe und
ab 1997 an der University of South Australia
Seit 1999 Professor an der EPFL
Frühere Arbeiten:
Pizza: erweitert Java um Generics, Funktionspointer, Pattern
Matching
GJ: erweitert Java um Generics, kaum verändert in Java 5
eingegangen
03.06.2008
Ausgewählte Themen der Softwaretechnik
4
2
Status
Stabilität: „quite stable and generates stable
byte-code that will run successfully on most
JREs“
zahlreiche Paper, sehr ausführliche
Dokumentation, viele Blog-Einträge
aktive Mailing-Listen, aktive Entwicklung
ein bisher 636 Seiten starkes Buch in Arbeit
3 aktuelle Jobangebote im Scala-Wiki
Lizenz: BSD-Style
03.06.2008
Ausgewählte Themen der Softwaretechnik
5
Oderskys Rechtfertigung
Aufstieg von Webservices und verteilter
Software vergleichbar zur Ablösung der
Command-Lines durch GUIs
was OO-Sprachen förderte
Webservices nutzen verschiedene Sprachen
Scala vereint diese Ansätze:
Funktional: XML-Verarbeitung
Objektorientiert: Geschäftslogik
Nebenläufigkeit
Statische Typisierung
03.06.2008
Ausgewählte Themen der Softwaretechnik
6
3
Eigenschaften (1)
„Scala“ hat zwei Bedeutungen:
italienisch für „Treppe“
für „scalable language“
Die Sprache ist:
skalierbar: gleiche Konzepte für kleine und große Teile
objektorientiert und funktional
03.06.2008
Ausgewählte Themen der Softwaretechnik
7
Eigenschaften (2)
Jeder Wert ist ein Objekt
Jede Operation ist eine Methode
Da Zahlen Objekte, sind haben sie Methoden:
1 + 2 * 3 / x
kann geschrieben werden als
1.+((2.*(3))./(x))
Gültige Bezeichner können aus Sonderzeichen
bestehen, z. B.: |^&<>=!:+*/%
Funktionen können in Variablen gespeichert und als
Argument an Methoden übergeben werden.
03.06.2008
Ausgewählte Themen der Softwaretechnik
8
4
Interaktion mit Java
Scala läuft auf der JVM
Volle Interoperabilität
Alle Java-Library-Klassen können importiert
werden.
java.lang wird automatisch importiert
Scala-Klassen können Java-Klassen erweitern.
Java Interfaces können implementiert werden.
03.06.2008
Ausgewählte Themen der Softwaretechnik
9
Typsystem
Statisch (Typprüfung zur Übersetzungszeit)
Bietet Typinferenz zur Ableitung von Typen ohne
explizite Typangabe:
var wahr1: Boolean = true
var wahr2 = true
Subtyp-Polymorphie und
Implementationsmehrfachvererbung möglich
03.06.2008
Ausgewählte Themen der Softwaretechnik
10
5
Typsystem: Überblick
Ausgewählte Themen der Softwaretechnik
03.06.2008
11
Syntax
Basiert stark auf Java und C#, aber:
kein Semikolon nach Anweisungen nötig
Deklarationen haben die Form name: typ
void ist in Scala Unit
Methoden mit nur einem Argument können als Infix-Notation
geschrieben werden:
arg.startsWith("-")
entspricht
arg startsWith "-"
keine static-Member
03.06.2008
werden nur als Singletons umgesetzt
Ausgewählte Themen der Softwaretechnik
12
6
Syntax: „Hello, world!“
Definiert ein Singleton
Deklarationen haben die Form
name: typ
object HelloWorld {
def main(args: Array[String]) {
println("Hello, world!")
}
}
Ruft Java auf: System.out.println(...)
GermanDate
03.06.2008
Ausgewählte Themen der Softwaretechnik
13
Syntax: Ausdrücke (1)
Simple Berechnungen, die ein Ergebnis und
einen Typ besitzen
87 + 145 => Int: 232
"hello" + " world!" =>
java.lang.String: "hello world!“
Können benannt werden: Schlüsselwort def
def radius = 10 => radius: Int
Auswertung der rechten Seite erst bei Benutzung des Namens
03.06.2008
Ausgewählte Themen der Softwaretechnik
14
7
Syntax: Ausdrücke (2)
Sofortige Auswertung mit Schlüsselwort val
Ablauf einer Auswertung:
val x = 12 * 15
Linksseitigste Operation auswählen
Ihre Operanden auswerten
Den Operator auf die Operanden anwenden
Ende, wenn ein Wert erreicht ist
Beispiel einer Auswertung:
(2 * pi) * radius
(2 * 3.141592653589793) * radius
6.283185307179586 * radius ...
=>
=>
03.06.2008
Ausgewählte Themen der Softwaretechnik
15
Syntax: Funktionen und
Parameter
Mittels def lassen sich auch Funktionen mit
oder ohne Parameter definieren
Parameter stehen in Klammern und haben die
übliche Form name: typ
Hat eine Funktion keine Parameter, können die
Klammern weggelassen werden
Aber: ein leeres Klammerpaar muss beim Aufruf jedoch immer
angegeben werden
03.06.2008
Ausgewählte Themen der Softwaretechnik
16
8
Syntax: Auswertung von
Funktionen (1)
Auswertung erfolgt standardmäßig über call-by-value:
def sumOfSquares(x: Double, y: Double) =
square(x) + square(y)
=>
=>
=>
=>
=>
=>
=>
03.06.2008
sumOfSquares(3, 2+2)
sumOfSquares(3, 4)
square(3) + square(4)
3 * 3 + square(4)
9 + square(4)
9 + 4 * 4
9 + 16
25
Ausgewählte Themen der Softwaretechnik
17
Syntax: Auswertung von
Funktionen (2)
Steht einem Parameter-Typ ein => voran, wird jedoch für diesen
Parameter call-by-name angewendet:
def sumOfSquares(x: Double, y: => Double) =
square(x) + square(y)
=>
=>
=>
=>
=>
=>
sumOfSquares(3, 2+2)
square(3) + square(2+2)
3 * 3 + square(2+2)
9 + square(2+2)
9 + (2+2) * (2+2)
9 + 4 * (2+2)
…
Vorteil: Die Auswertung wird verzögert, bis sie benötigt wird. Ein
nicht benötigter Parameter wird auch nicht ausgewertet.
03.06.2008
Ausgewählte Themen der Softwaretechnik
18
9
Syntax: Fallunterscheidungen
if-else-Konstrukt
Syntax wie in Java
Unterschied: Java erlaubt nur die Auswahl zwischen
zwei Anweisungen
Scala erlaubt auch die Auswahl zwischen zwei
Ausdrücken
if-else in Scala also auch wie ... ? ... : ... in
Java
Beispiel:
def abs(x: Double) = if (x >= 0) x else -x
03.06.2008
19
Ausgewählte Themen der Softwaretechnik
Syntax: Blöcke
Werden mit geschwungenen Klammern
umschlossen: { ... }
Gelten als Ausdruck und haben einen Wert.
Der Wert wird durch den letzten Ausdruck im
Block definiert (kein explizites return nötig).
Newton
03.06.2008
Ausgewählte Themen der Softwaretechnik
20
10
Syntax: Funktionen höherer
Ordnung
Nehmen eine andere Funktion als Parameter
oder geben eine Funktion als Ergebnis zurück.
Beispiel:
def sum(f: Int => Int, a: Int, b: Int): Int =
if (a > b) 0 else f(a) + sum(f, a + 1, b)
03.06.2008
21
Ausgewählte Themen der Softwaretechnik
Syntax: Anonyme Funktionen
Ausdruck, der zu einer Funktion ausgewertet
wird
Werden ohne Namen definiert:
(x: Int) => x * x
Können immer auch durch „normale“
Funktionsdefinitionen ersetzt werden
=> nur „syntaktischer Zucker“
HighOrder
03.06.2008
Ausgewählte Themen der Softwaretechnik
22
11
Syntax: Klassendefinition
Schlüsselwort class
Primärer Konstruktor wird im Kopf der Klasse
angegeben
Member der Klasse können auf private
gesetzt werden
Erzeugen eines Exemplars mit Schlüsselwort
new
03.06.2008
23
Ausgewählte Themen der Softwaretechnik
Syntax: Vererbung
implizite Superklasse: scala.ScalaObject
Die Unterklasse erbt alle Member der
Oberklasse
Überschreiben explizit mit Schlüsselwort
override
Wenn Klasse A Klasse B erweitert, können
Exemplare von Klasse A überall verwendet
werden, wo Exemplare von Klasse B erwartet
werden.
Rational
03.06.2008
Ausgewählte Themen der Softwaretechnik
24
12
Syntax: Abstrakte Klassen
Analog zu Java:
Schlüsselwort
abstract
Können
abstrakte Member enthalten
Es können keine Exemplare erzeugt werden.
03.06.2008
25
Ausgewählte Themen der Softwaretechnik
Syntax: Mixins
Ähnlich den Interfaces in Java
Dürfen aber Code enthalten
Erlauben das „Beimischen“ von Funktionalität zu
einer Klasse und
Implementationsmehrfachvererbung.
Date
03.06.2008
Ausgewählte Themen der Softwaretechnik
26
13
Syntax: Case Classes
Schlüsselwort case wird class vorangestellt
Case classes haben einige Besonderheiten:
Implizite Konstruktorfunktion mit demselben Namen wie die Klasse
(kein new mehr nötig beim Aufruf)
Automatische Generierung von toString, equals und
hashCode
Automatische Generierung von Gettern für Konstruktorargumente
Case classes erlauben die Konstruktion von Mustern (engl.:
pattern), die sich auf den Konstruktor der case class beziehen.
1.
2.
3.
4.
03.06.2008
27
Ausgewählte Themen der Softwaretechnik
Syntax: Pattern matching
Ähnlich einer switch-Anweisung in Java
Wird mittels der Methode match aufgerufen
Allgemein: Pattern werden aus folgenden
Anweisungen zusammengebaut:
Case class Konstruktoren, deren Argumente wieder Pattern
sind.
Pattern Variablen
Dem „Wildcard“ Pattern _
Literale: true, “abc“
Konstanten
03.06.2008
Expr (target)
Ausgewählte Themen der Softwaretechnik
28
14
Weitere Sprachbestandteile
XML: Bestandteil der Sprache
Actors und Messages: ähnlich Erlang
Unterstützung von Nebenläufigkeit
Tupel und Listen
For-Comprehensions
implicit Funktionen und Parameter
Refinements
und vieles mehr...
03.06.2008
Ausgewählte Themen der Softwaretechnik
29
Ende
Vielen Dank für die Aufmerksamkeit!
Kontaktdaten:
Simon Gerlach
Johannes Kuhlmann
03.06.2008
[email protected]
[email protected]
Ausgewählte Themen der Softwaretechnik
30
15
Quellen
Odersky, Martin: A Brief History of Scala, http://www.artima.com/weblogs/viewpost.jsp?thread=163733 (abgerufen
30.5.2008), 9.6.2006.
Odersky, Martin: Pimp my Library, http://www.artima.com/weblogs/viewpost.jsp?thread=179766 (abgerufen 30.5.2008),
9.10.2006.
Odersky, Martin: The Scala Experiment, Google Tech Talk, http://lampwww.epfl.ch/~odersky/talks/google06.pdf
(abgerufen 30.5.2008), 2006.
Odersky, Martin: Scala Rationale, http://www.scala-lang.org/docu/files/ScalaRationale.pdf (abgerufen 30.5.2008),
13.6.2007.
Odersky, Martin: The Scala Language Specification, Version 2.7 (Draft), 2008.
Odersky, Martin, Phillipe Altherr et al.: An Overview of the Scala Programminig Language, 2006.
Scala Wiki, http://scala.sygneca.com/ (abgerufen 30.5.2008), 2008.
Schinz Michel und Philipp Haller: A Scala Tutorial for Java programmers, Version 1.2, http://www.scalalang.org/docu/files/ScalaTutorial.pdf (abgerufen 30.5.2008), 2008.
Odersky, Martin: Scala By Example, Draft, http://www.scala-lang.org/docu/files/ScalaByExample.pdf (abgerufen am
19.05.2008), 05.05.2008
The Scala Programming Language, http://www.scala-lang.org/ (abgerufen 30.5.2008), 2008.
Upadhya, Revati: Steps (Titelbild), http://www.sxc.hu/photo/857689 (abgerufen 30.5.2008), 2007.
Venners, Bill, Martin Odersky und Lex Spoon: First Steps to Scala, http://www.artima.com/scalazine/articles/steps.html
(abgerufen 30.5.2008), 9.5.2007.
03.06.2008
Ausgewählte Themen der Softwaretechnik
31
16
Herunterladen