• 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!
2
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]

Organisatorisches

I Fachgespräche:

IVorschlag Termine: 01.02., 11.02.

IDritter Termin ggf. 12.02. (nach Bedarf)

I Evaluation:

IEs wird einenOnline-Fragebogengeben (unter Stud.IP)

IBitteausfüllen!

2 [16]

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]

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/

4 [16]

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]

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]

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]

Implementierung algebraischer Datentypen

Haskell:

data T =C1 |. . . | Cn

I Ein TypT

I Konstruktoren erzeugen Datentyp

Scala:

T C1

. . . Cn

-

IVarianten alsSubtypen IProblem und Vorteil:

Erweiterbarkeit

Isealedverhindert Erweiterung

8 [16]

(2)

Das Typsystem

Behandelt:

I Werte vs. Objekte

I Scala vs. Java

I NULLreferences

9 [16]

Vererbungshierarchie

Quelle: Odersky, Spoon, Venners:Programming in Scala

10 [16]

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?

I Funktionsraum nicht monoton im ersten Argument

I SeiXY, dannZ−→XZ−→Y, aberX−→Z6⊆Y−→Z

11 [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 ParameterTkann

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 }

12 [16]

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]

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)

14 [16]

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]

Beurteilung

I Vorteile:

IFunktional programmieren, in der Java-Welt leben

IGelungene Integration funktionaler und OO-Konzepte

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

IManchmal etwaszuviel

IEntwickelt sich ständig weiter

IOne-Compiler-Language, vergleichsweise langsam

16 [16]

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..

I Statt fertiger Sprache mit vielen Konstrukten Rahmenwerk zur Implementation eigener Konstrukte:. I

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

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