• Keine Ergebnisse gefunden

Scala am Beispiel: 01-GCD.scala

N/A
N/A
Protected

Academic year: 2022

Aktie "Scala am Beispiel: 01-GCD.scala"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Reaktive Programmierung

Vorlesung 4 vom 23.04.15: A Practical Introduction to Scala

Christoph Lüth & Martin Ring Universität Bremen Sommersemester 2015

15:23:44 2015-05-05 1 [17]

Fahrplan

I Teil I: Grundlegende Konzepte

IWas ist Reaktive Programmierung?

INebenläufigkeit und Monaden in Haskell

IFunktional-Reaktive Programmierung

IEinführung in Scala

IDie Scala Collections

IScalaCheck I Teil II: Nebenläufigkeit

I Teil III: Fortgeschrittene Konzepte

2 [17]

Heute: Scala

I Ascalablelanguage I Rein objektorientiert I Funktional I Eine “JVM-Sprache”

I Seit 2004 von Martin Odersky, EPFL Lausanne (http://www.scala-lang.org/).

I Seit 2011 kommerziell durch Typesafe Inc.

3 [17]

Scala am Beispiel: 01-GCD.scala

Was sehen wir hier?

I Variablen, veränderlich —Mit Vorsicht benutzen!

I Werte, unveränderlich

I while-Schleifen —Unnötig!

I Rekursion — einfache Endrekursion wird optimiert

I Typinferenz — mehr als Java, weniger als Haskell

4 [17]

Scala am Beispiel: 02-Rational.scala

Was sehen wir hier?

I Klassenparameter I this

I Methoden, Syntax für Methodenanwendung I override(nicht optional)

I private Werte und Methoden I Klassenvorbedingunge (require) I Overloading

I Operatoren

5 [17]

Algebraische Datentypen: 03-Expr.scala

Was sehen wir hier?

I case classerzeugt

IFactory-Methode für Konstruktoren

IParameter als impliziteval

Iabgeleitete Implementierung fürtoString,equals

Istrukturelle Gleichheit

I. . . und pattern matching I Pattern sind

Icase 4 =>— Literale

Icase C(4) =>— Konstruktoren

Icase C(x) =>— Variablen

Icase C(_) =>— Wildcards

Icase x: C =>— getypte pattern

Icase C(D(x: T, y), 4) =>— geschachtelt

6 [17]

Implementierung algebraischer Datentypen

Haskell:

data T = C1 | ... | Cn I Ein TypT

I Konstruktoren erzeugen Datentyp

Scala:

T C1

. . . Cn

-

I Varianten alsSubtypen I Problem und Vorteil:

Erweiterbarkeit

I sealedverhindert Erweiterung

7 [17]

Das Typsystem

Behandelt:

I Werte vs. Objekte

I Scala vs. Java

I NULLreferences

8 [17]

(2)

Vererbungshierarchie

Quelle: Odersky, Spoon, Venners:Programming in Scala

9 [17]

Parametrische Polymorphie

I Typparameter (wie in Java, Haskell), Bsp.List[T]

I Problem: Vererbung und Polymorphie

I Ziel: wennS<T, dannList[S]<List[T]

I Problem:Ref.hs I Warum?

IFunktionsraum nicht monoton im ersten Argument

ISeiXY, dannZ−→XZ−→Y, aberX−→Z6⊆Y−→Z

10 [17]

Typvarianz

class C[+T]

I Kovariant I S<T, dann

C[S]<C[T]

I ParameterTnicht in Def.bereich

class C[T]

I Rigide I Kein Subtyping I ParameterTkann

beliebig verwendet werden

class C[-T]

IKontravariant IS<T, dann

C[T]<C[S]

IParameterTnicht in Wertebereich

Beispiel:

class Function[-S, +T] { def apply(x:S) : T }

11 [17]

Traits: 04-Funny.scala

Was sehen wir hier?

I Traits(Mix-ins): abstrakte Klassen, Interfaces; Haskell: Typklassen I Unterschied zu Klassen:

IKeine Parameter

IKeine feste Oberklasse (superdynamisch gebunden) I Nützlich zur Strukturierung:

thin interface+trait=rich interface Beispiel:04-Ordered.scala,04-Rational.scala

12 [17]

Was sind Traits?

I Trait≈Abstrakte Klasse ohne Parameter:

trait Foo[T] { def foo: T

def bar: String = "Hallo"

}

I Erlauben “Mehrfachvererbung”:

class Cextends Foo[Int] with Bar[String] { ... } I Können auch als Mixins verwendet werden:

trait Funny {

def laugh() = println("hahaha") }

(new Cwith Funny).laugh()// hahaha

13 [17]

Implizite Parameter

I Implizite Parameter:

def laugh(implicit stream: PrintStream) = stream.println("hahaha")

I Werden im Kontext des Aufrufs aufgelöst. (Durch den Typen) I Implizite Parameter + Traits≈Typklassen:

traitShow[T] { def show(value: T): String } def print[T](value: T)(implicit show: Show[T]) =

println(show.show(value))

implicit object ShowInt extends Show[Int] { def show(value: Int) = value.toString }

print(7)

14 [17]

Implizite Konversionen

I Implizite Konversionen:

implicit def stringToInt(string: String) = string.toInt val x: Int = "3"

x * "5" == 15 // true

"5" % "4" == 1// true I Mit großer Vorsicht zu genießen!

I “Extension Methods” / “Pimp-My-Library” allerdings sehr nützlich!

I Besser: Implizite Klassen

implicit classRichString(s: String) { def shuffle = Random.shuffle(s.toList)

.mkString }

"Hallo".shuffle // "laoHl"

15 [17]

Scala — Die Sprache

I Objekt-orientiert:

IVeränderlicher, gekapselterZustand

ISubtypen und Vererbung

IKlassen und Objekte I Funktional:

IUnveränderlicheWerte

IPolymorphie

IFunktionen höherer Ordnung

16 [17]

(3)

Beurteilung

I Vorteile:

I Funktional programmieren, in der Java-Welt leben

I Gelungene Integration funktionaler und OO-Konzepte

I Sauberer Sprachentwurf, effiziente Implementierung, reiche Büchereien I Nachteile:

I Manchmal etwaszuviel

I Entwickelt sich ständig weiter

I One-Compiler-Language, vergleichsweise langsam

17 [17]

Referenzen

ÄHNLICHE DOKUMENTE

Praktische Informatik 3: Funktionale Programmierung Vorlesung 13 vom 20.01.15: Scala — Eine praktische Einführung.. Christoph Lüth Universität Bremen

Quelle: Odersky, Spoon, Venners: Programming in Scala.

Praktische Informatik 3: Funktionale Programmierung Vorlesung 13 vom 22.01.13: Scala — When Java meets Functional.. Christoph Lüth Universität Bremen

gramm des Sarkophages mit dem Hinweis, daß Cangrande am Festtag der hl. Juli, dem Festtag des hl. Jakobus, in Verona bestattet wurde. 18 Simeoni hielt den Reliefsarkophag

Faire Erwartungen an die Schülerinnen und Schüler zu richten be- deutet beispielsweise: Wenn eine Lehr- person ein Kind mit Potenzial entdeckt und dieses fördert, auch wenn es aus

Kontroll Strukturen Funktionen und Closures Kontroll Abstraktion Komposition und Vererbung Hierarchien in Scala Pakete. Test Driven Development Listen und Collections Arbeiten

Kontroll Strukturen Funktionen und Closures Kontroll Abstraktion Komposition und Vererbung Hierarchien in Scala Pakete. Test Driven Development Listen und Collections Arbeiten

Kontroll Strukturen Funktionen und Closures Kontroll Abstraktion Komposition und Vererbung Hierarchien in Scala Pakete. Test Driven Development Listen und Collections Arbeiten