Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Higher Order Perl Martin Busik Vortrag über das Buch von Marc Jason Dominus.

Ähnliche Präsentationen


Präsentation zum Thema: "Higher Order Perl Martin Busik Vortrag über das Buch von Marc Jason Dominus."—  Präsentation transkript:

1 Higher Order Perl Martin Busik Vortrag über das Buch von Marc Jason Dominus

2 Martin Busik Softwareentwicklung ist geprägt durch Hypes

3 Martin Busik Sie als Perl-Programmierer sind starken Vorurteilen ausgesetzt... perl is a write-once language

4 Martin Busik Räumen Sie die Vorurteile aus, in dem sie Konzepte der FP nutzen

5 Martin Busik Konzepte der Funktionalen Programmierung können in Perl verwendet werden $asub = sub {...} $csub = (...) ? $asub : \&bsub; $esub = $csub->($dsub,sub{$_*2},..) $esub->(...)

6 Martin Busik Das HOP-Buch ändert Ihre Art zu programmieren … vielleicht sogar ihr Verständnis der Programmierung

7 Martin Busik Der Schlüssel zu FP in Perl sind Closures sub add { my $a = shift; sub { my $b = shift; $a + $b } } $add5 = add(5); print $add5->(7);

8 Martin Busik Mit Closures können Sie globale Variablen eliminieren $SIG{__WARN__} = commonLogging($opt->{L} || 3); warn 5, " Starte xyz";

9 Martin Busik Auch ohne globale Variablen haben Sie einen "Zustand" *getNextId = sequenceGenerator(5); $a = getNextId();# $a enthält 5 $b = getNextId();# $b enthält 6

10 Martin Busik Trennen Sie Implementierung und Caching sub rgb2cmyk { my($r,$g,$b) } sub $rgb2cmyk_cached = wrap(\&rgb2cmyk);

11 Martin Busik Nutzen Sie Memoization für rekursive Funktionen sub asub { $n = shift; asub(--$n) if $n > 0 } *asub = wrap(\&asub); asub(5); sub asub { $n = shift; asub(--$n) if $n > 0 } use Memoize; memoize asub; asub(5);

12 Martin Busik $dt = { new => sub{...}, p => sub{...}, q => sub{...}}; $c = $dt->{$p}; die ".." unless ref($c); $c->(); Nutzen Sie Dispatch-Tabellen if($p eq "new") {...} elsif($p eq "p") {...} elsif($p eq "q") {...} else { die ".." }

13 Martin Busik Nutzen Sie Dispatch-Tabellen – mit und ohne Closures sub asub { my (...) my $f1=sub {..} my $f2=sub {... $f1->(..) } my $dt = { fall1 => $f1, fall2 => $f2, } $a = $dt->{$p}; $a->(...)

14 Martin Busik Verwenden Sie Iteratoren $i = erzeuge_iterator(...); $e1 = $i->(); $e2 = $i->next(); $e3 = $i->('next'); $i->hasNext(); $i->('hasNext?'); while(my $e = $i->())

15 Martin Busik Verwenden Sie Iteratoren... aber nicht nur als = (...) = (...) $i = while($e = $i->()) {operation($e)} An dieser Stelle "weiss" man nicht mehr, das über ein Array iteriert wird.

16 Martin Busik Verwenden Sie Iteratoren... eliminieren Sie = (...) $i = 0; while($i { op1($s[i++]) or last } while($i { op2($s[i++]) or last = (...) $i = op1($i); op2($i);

17 Martin Busik Definieren Sie Operationen auf Iteratoren igrep imap $i = igrep {$_->[0]=~/raute/i} $ai $e = $i->() $i = imap {{inh => $_}} $ai $e = $i->()

18 Martin Busik Wandeln Sie Rekursion in Iteration um... wenn Sie die Abbruchbedinung erst zur Laufzeit formulieren wollen... wenn die Ergebnismenge unendlich ist

19 Martin Busik Currying kann zur Code-Wieder- verwendung genutzt werden sub reduce {...} $summe = $produkt= *sumF = reduce({$a+$b},0); $summe = $spF=reduce({[$a+$b,$a*$b]},[0,1])

20 Martin Busik Einge Themen, die das Buch be- handelt, habe ich Ihnen vorenthalten... Datenströme (Streams)... Parser... Deklarative Programmierung

21 Martin Busik Konzepte 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

22 Martin Busik Danke für Ihre Aufmerksamkeit!


Herunterladen ppt "Higher Order Perl Martin Busik Vortrag über das Buch von Marc Jason Dominus."

Ähnliche Präsentationen


Google-Anzeigen