Title: Higher Order Perl
1Higher Order Perl
Vortrag über das Buch von Marc Jason Dominus
- Martin Busik
- martin.busik_at_busik.de
2Softwareentwicklung ist geprägt durch Hypes
3Sie als Perl-Programmierer sind starken
Vorurteilen ausgesetzt
- ... perl is a write-once language
4Räumen Sie die Vorurteile aus, in dem sie
Konzepte der FP nutzen
5Konzepte der Funktionalen Programmierung können
in Perl verwendet werden
- asub sub ...
- csub (...) ? asub \bsub
- esub csub-gt(dsub,sub_2,..)
- esub-gt(...)
6Das HOP-Buch ändert Ihre Art zu programmieren
- vielleicht sogar ihr Verständnis der
Programmierung
7Der Schlüssel zu FP in Perl sind Closures
- sub add my a shiftsub
- my b shift a b
-
-
-
add5 add(5) print add5-gt(7)
8Mit Closures können Sie globale Variablen
eliminieren
- SIG__WARN__ commonLogging(opt-gtL 3)
- warn 5, " Starte xyz"
9Auch ohne globale Variablen haben Sie einen
"Zustand"
- getNextId sequenceGenerator(5)
- a getNextId() a enthält 5
- b getNextId() b enthält 6
10Trennen Sie Implementierung und Caching
- sub rgb2cmyk
- my(r,g,b) _at__
- ..
-
- sub rgb2cmyk_cached wrap(\rgb2cmyk)
- rgb2cmyk_cached-gt(_at_color)
11Nutzen Sie Memoization für rekursive Funktionen
- sub asub
- n shift
- asub(--n) if n gt 0
-
- asub wrap(\asub)
- asub(5)
sub asub n shift asub(--n) if n gt
0 use Memoize memoize asub asub(5)
12Nutzen Sie Dispatch-Tabellen
dt new gt sub..., p gt sub..., q
gt sub... c dt-gtp die ".." unless
ref(c) c-gt()
- if(p eq "new")
- ...
- elsif(p eq "p")
- ...
- elsif(p eq "q")
- ...
- else die ".."
13Nutzen Sie Dispatch-Tabellen mit und ohne
Closures
- sub asub my (...) _at__ my f1sub .. my
f2sub ... f1-gt(..) -
my dt fall1 gt f1, fall2 gt f2, a
dt-gtp a-gt(...)
14Verwenden Sie Iteratoren
- i erzeuge_iterator(...)
- e1 i-gt()
- e2 i-gtnext()
- e3 i-gt('next')
- i-gthasNext()
- i-gt('hasNext?')
- while(my e i-gt())
15Verwenden Sie Iteratoren... aber nicht nur als
for-Ersatz
- _at_s (...)
- for(i0ilt_at_si)
- operation(si)
- _at_s (...)
- i arr_iter(_at_s)
- while(e i-gt())
- operation(e)
16Verwenden Sie Iteratoren... eliminieren Sie
Schleifen
- _at_s (...)
- i 0
- while(i lt _at_s)
- op1(si) or last
-
- while(i lt _at_s)
- op2(si) or last
- _at_s (...)
- i arr_iter(_at_s)
- op1(i)
- op2(i)
17Definieren Sie Operationen auf Iteratoren
i igrep _-gt0/raute/i ai e i-gt()
i imap inh gt _ ai e i-gt()
18Wandeln Sie Rekursion in Iteration um
- ... wenn Sie die Abbruchbedinung erst zur
Laufzeit formulieren wollen
... wenn die Ergebnismenge unendlich ist
19Currying kann zur Code-Wieder- verwendung genutzt
werden
- sub reduce (_at_) ...
- summe reduce(ab,0,_at_arr)
- produkt reduce(ab,1,_at_arr)
- sumF reduce(ab,0)
- summe sumF(_at_arr)
- spFreduce(ab,ab,0,1)
20Einge Themen, die das Buch be- handelt, habe ich
Ihnen vorenthalten
- ... Datenströme (Streams)
- ... Parser
- ... Deklarative Programmierung
21Konzepte der Funktionalen Programmierung können
in Perl verwendet werden
Aptly named, this truly /is/ a Perl book of a
higher order, and essential reading for every
serious Perl programmer Damian Conway
22Danke für Ihre Aufmerksamkeit!
martin.busik_at_busik.de