• Keine Ergebnisse gefunden

Praktische Informatik 3: Funktionale Programmierung Vorlesung 13 vom 22.01.13: Scala — When Java meets Functional

N/A
N/A
Protected

Academic year: 2022

Aktie "Praktische Informatik 3: Funktionale Programmierung Vorlesung 13 vom 22.01.13: Scala — When Java meets Functional"

Copied!
20
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Praktische Informatik 3: Funktionale Programmierung Vorlesung 13 vom 22.01.13: Scala — When Java meets Functional

Christoph Lüth

Universität Bremen

Wintersemester 2012/13

Rev. 1999 1 [16]

(2)

Organisatorisches

I Fachgespräche:

I Vorschlag Termine: 01.02., 11.02.

I Dritter Termin ggf. 12.02. (nach Bedarf)

I Evaluation:

I Es wird einenOnline-Fragebogengeben (unter Stud.IP)

I Bitteausfüllen!

(3)

Fahrplan

I Teil I: Funktionale Programmierung im Kleinen

I Teil II: Funktionale Programmierung im Großen

I Teil III: Funktionale Programmierung im richtigen Leben

I Effizienzaspekte

I Eine Einführung in Scala

I Rückblich & Ausblick

3 [16]

(4)

Heute: Scala

I Ascalable language

I Multi-paradigma-Sprache

I “Lebt im Java-Ökosystem”

I Martin Odersky, ETH Lausanne

I http://www.scala-lang.org/

(5)

Scala am Beispiel: 01-GCD.scala

Was sehen wir hier?

I Variablen, veränderlich

I Werte, unveränderlich

I while-Schleifen

I Rekursion —einfache Endrekursion wird optimiert

I Typinferenz — mehr als Java, weniger als Haskell

5 [16]

(6)

Scala am Beispiel: 01-GCD.scala

Was sehen wir hier?

I Variablen, veränderlich

I Werte, unveränderlich

I while-Schleifen

I Rekursion —einfache Endrekursion wird optimiert

I Typinferenz — mehr als Java, weniger als Haskell

(7)

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

6 [16]

(8)

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

(9)

Algebraische Datentypen: 03-Expr.scala

Was sehen wir hier?

I case classerzeugt

I Factory-Methode für Konstruktoren

I Parameter als impliziteval

I abgeleitete Implementierung fürtoString,equals

I . . . und pattern matching

I Pattern sind

I Konstanten

I Konstruktoren

I Variablen

I Wildcards

I getypte pattern

7 [16]

(10)

Algebraische Datentypen: 03-Expr.scala

Was sehen wir hier?

I case classerzeugt

I Factory-Methode für Konstruktoren

I Parameter als impliziteval

I abgeleitete Implementierung fürtoString,equals

I . . . und pattern matching

I Pattern sind

I Konstanten

I Konstruktoren

I Variablen

I Wildcards

I getypte pattern

(11)

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

8 [16]

(12)

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

(13)

Das Typsystem

Behandelt:

I Werte vs. Objekte

I Scala vs. Java

I NULLreferences

9 [16]

(14)

Vererbungshierarchie

Quelle: Odersky, Spoon, Venners:Programming in Scala

(15)

Parametrische Polymorphie

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

I Problem: Vererbung und Polymorphie

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

I Problem:Ref.hs

I Warum?

I Funktionsraum nicht monoton im ersten Argument

I SeiX Y, dann Z −→X Z −→Y, aberX −→Z 6⊆Y −→Z

11 [16]

(16)

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 Parameter Tkann beliebig verwendet werden

class C[-T]

I Kontravariant

I S<T, dann C[T]<C[S]

I ParameterTnicht in Wertebereich Beispiel:

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

(17)

Traits: 04-Funny.scala

Was sehen wir hier?

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

I Unterschied zu Klassen:

I Keine Parameter

I Keine feste Oberklasse (superdynamisch gebunden)

I Nützlich zur Strukturierung:

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

13 [16]

(18)

Was wir ausgelassen haben. . .

I Komprehension (nicht nur für Listen)

I Gleichheit (==,equals)

I Implizite Parameter und Typkonversionen

I Nativer XML Support

I Nebenläufigkeit (Aktoren)

(19)

Scala — Die Sprache

I Objekt-orientiert:

I Veränderlicher, gekapselterZustand

I Subtypen und Vererbung

I Klassen und Objekte

I Funktional:

I UnveränderlicheWerte

I Polymorphie

I Funktionen höherer Ordnung

15 [16]

(20)

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

Referenzen

ÄHNLICHE DOKUMENTE

Ein Typsystem ist eine handhabbare syntaktische Methode, um die Abwesenheit bestimmter Programmverhalten zu beweisen, indem Ausdrücke nach der Art der Werte, die sie

Ein Typsystem ist eine handhabbare syntaktische Methode, um die Abwesenheit bestimmter Programmverhalten zu beweisen, indem Ausdrücke nach der Art der Werte, die sie

Praktische Informatik 3: Funktionale Programmierung Vorlesung 13 vom 20.01.15: Scala — Eine praktische Einführung..

I Eine Funktion hat ein Speicherleck, wenn Speicher unnötig lange im Zugriff bleibt. I “Echte” Speicherlecks wie in C/C++

Was sind die wesentlichen Gemeinsamkeiten, und was sind die wesentlichen Unterschiede zwischen algebraischen Datentypen in Haskell, und Objekten in Java?.3. Welche

I Tutorien: Mo 10-12 MZH 5210 Christian Maeder Mo 16-18 MZH 1380 Rene Wagner Di 8-10 MZH 1100 Diedrich Wolter Di 10-12 MZH 1380 Diedrich Wolter Di 10-12 MZH 1400 Bernd Gersdorf Di

werden gleichzeitig definiert (Rekursion!) I Namen f, y und Parameter (x) überlagern andere I Es gilt die Abseitsregel. I Deshalb: Auf gleiche Einrückung der lokalen

Christoph Lüth &amp; Dennis Walter Universität Bremen Wintersemester