Funktionale Konzepte in objektorientierten Sprachen

Werbung
Funktionale Konzepte in
objektorientierten
Sprachen
LAMBDAS / CLOSURES
Motivation
Überblick

Was macht Funktionale Programmierung aus?

Sind Funktionale Programmierung und Objektorientierte
Programmierung Gegensätze?

Was sind Lambdas/Closures?

Wie kann ich mit Closures in Java 8 meinen Code verbessern?
Funktionale Programmierung Definition

In computer science, functional programming is a programming
paradigm — a style of building the structure and elements of
computer programs — that treats computation as the
evaluation of mathematical functions and avoids changingstate and mutable data.
Funktionale Programmierung Konzepte

First-class and higher-order functions

Closures / Lambdas

Pure functions

Recursion

Type systems

Referential Transparency
“Classes should be immutable unless there’s a very good reason to
make them mutable… . If a class cannot be made immutable,
limit its mutability as much as possible.”
– Joshua Bloch, Effective Java (2001)
Was sind Lambdas/Closures?

Lambda: Anonyme Funktion

Closure: Schließt äußeren Lexical Scope ein

Begriffe werden im Bezug auf Java austauschbar verwendet
Erfahrungen mit Closures

Wer hat Erfahrung mit Closures?

In welchen Sprachen?
Erfahrungen mit Closures

Hat schon jemand ein Closure in Java 8 geschrieben?

Hat jemand ein Closure in Java vor Version 8 geschrieben?
Anonymous Inner Classes
"Closures were left out of Java initially more because of time pressures than
anything else. Closures, as a concept, are tried and true - well past the days
of being PhD topics. The arguments are in the details, not the broad
concepts. In the early days of Java the lack of closures was pretty painful,
and so inner classes were born: an uncomfortable compromise that
attempted to avoid a number of hard issues. But as is normal in so many
design issues, the simplifications didn't really solve any problems, they just
moved them. We should have gone all the way back then."
- James Gosling, "father of the Java programming language", Jan 31, 2008
Lambda
Vergleich
Functional Interfaces
Functional Interfaces
Werte
Werte
Closures.. but why?

Injektion von Verhalten

Bessere Abstraktion möglich

Convenience
Introducing the Stream-API

Enthält eine Menge an Daten

Single Use

Immutable

Kann aus Arrays, Collections, IO-Channels und Generatorfunktionen erstellt
werden

Elemente können in eine Collection gespeichert werden

(Un)Sortiert - abhängig von der Quelle

Lazy Evaluation
Motivation Stream-API

Einfache Parallelisierung von Operationen auf Datenmengen

Problem:
For-Loops über Collections verletzen "Dependency Inversion Principle"
“Depend upon Abstractions. Do not depend upon concretions.”

Lösung:
Iteration über Collections abstrahieren
Lazy Evaluation
Primzahlen aus "endlosem" Stream
Primzahlen – Parallele Berechnung
Zusammenfassung

OO und FP können voneinander profitieren

Vor Java 8 Closures durch Anonyme Klassen

Closures in Java 8 eröffnen sich neue Abstraktionsmöglichkeiten

Mächtige Stream-API mit Parallelisierung und Lazy Evaluation
IMHO
Quellen

http://jav a.amitph.com/2014/01/understanding-jav a-8-streams-api.html

https://blogs.oracle.com/jag/entry/closures

http://w w w .lambdafaq.org/lambdas-and-closures-w hats-the-difference/

http://okmij.org/ftp/Scheme/oop-in-fp.txt

http://lua-users.org/w iki/ObjectOrientationTutorial

https://en.w ikipedia.org/w iki/Closure_(computer_programming)

http://c2.com/cgi/wiki?ClosuresAndObjectsAreEquiv alent

http://stackov erflow.com/a/25441208/4266296

http://stackov erflow.com/a/30596139/4266296

http://thestandardoutput.com/posts/get-a-prime-number-sequence-using-jav a-8-streams/

Warburton, Richard: Object Oriented v s Functional Programming: Bridging the Div ide Between Opposing Paradigms,
Sebastopol, California. O'Reilly Media, 2015.

Warburton, Richard: Jav a 8 Lambdas: Pragmatic Functional Programming, Sebastopol, California, O'Reilly Media, 2014.
Bildquellen

http://www.cs.uni.edu/~wallingf/blog-images/computing/make-let-notvar-small.jpg
Fin
Herunterladen