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