{"id":1898,"date":"2013-05-28T14:39:51","date_gmt":"2013-05-28T12:39:51","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=1898"},"modified":"2013-05-28T14:40:07","modified_gmt":"2013-05-28T12:40:07","slug":"funktionale-programmierung-in-java-am-beispiel-vom-comparator","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2013\/05\/funktionale-programmierung-in-java-am-beispiel-vom-comparator\/","title":{"rendered":"Funktionale Programmierung in Java am Beispiel vom Comparator"},"content":{"rendered":"<p>Funktionale Programmierung hat auch daher etwas akademisches, weil in den K\u00f6pfen der Entwickler oftmals dieses Programmierparadigma nur mit mathematischen Funktionen in Verbindung gebracht wird. Und die wenigsten werden tats\u00e4chlich Fakult\u00e4t oder Fibonacci-Zahlen in Programmen ben\u00f6tigen und daher schnell funktionale Programmierung beiseite legen. Doch diese Vorurteile sind unbegr\u00fcndet, und es ist hilfreich, gedanklich funktionale Programmierung von der Mathematik l\u00f6sen, denn die allermeisten Programme haben nichts mit mathematischen Funktionen im eigentlichen Sinne zu tun.<\/p>\n<p>Betrachten wir die Sortierung von Strings. Ein Comparator ist eine einfache Funktion, mit zwei Parametern und einer R\u00fcckgabe. Diese Funktion wiederum wird an die sort(\u2026)-Methode \u00fcbergeben. Alles das ist funktionale Programmierung, denn wir programmieren Funktionen und \u00fcbergeben sie. Drei Beispiele (Generics ausgelassen):   <\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"382\">\n<p><b>Code<\/b><\/p>\n<\/td>\n<td valign=\"top\" width=\"382\">\n<p><b>Bedeutung<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"382\">\n<p>Comparator c = (c1, c2) -&gt; &#8230;<\/p>\n<\/td>\n<td valign=\"top\" width=\"382\">\n<p>Implementiert eine Funktion<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"382\">\n<p>Arrays.sort(T[] a, Comparator c)<\/p>\n<\/td>\n<td valign=\"top\" width=\"382\">\n<p>Nimmt eine Funktion als Argument an<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"382\">\n<p>Collections.reverseOrder(Comparator cmp)<\/p>\n<\/td>\n<td valign=\"top\" width=\"382\">\n<p>Nimmt eine Funktion an und liefert auch eine zur\u00fcck<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Funktionen selbst k\u00f6nnen in Java nicht \u00fcbergeben werden, also helfen sich Java-Entwickler mit der M\u00f6glichkeit, die Funktionalit\u00e4t in eine Methode zu kapseln, sodass die Funktion zum Objekt mit einer Methode wird, was die Logik realisiert. Lambda-Ausdr\u00fccke bzw. Methoden\/Konstruktor-Referenzen geben eine kompakte Syntax.<\/p>\n<p>Der Typ Comparator ist eine funktionale Schnittstelle und steht f\u00fcr eine besondere Funktion mit zwei Parametern gleichen Typs und einer Ganzzahl-R\u00fcckgabe. Es gibt weitere funktionale Schnittstellen, die etwas flexibler sind als Comparator, in der Weise, dass etwa die R\u00fcckgabe statt int auch double oder etwas anderes sein k\u00f6nnen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Funktionale Programmierung hat auch daher etwas akademisches, weil in den K\u00f6pfen der Entwickler oftmals dieses Programmierparadigma nur mit mathematischen Funktionen in Verbindung gebracht wird. Und die wenigsten werden tats\u00e4chlich Fakult\u00e4t oder Fibonacci-Zahlen in Programmen ben\u00f6tigen und daher schnell funktionale Programmierung beiseite legen. Doch diese Vorurteile sind unbegr\u00fcndet, und es ist hilfreich, gedanklich funktionale Programmierung von [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11,66],"tags":[],"class_list":["post-1898","post","type-post","status-publish","format-standard","hentry","category-insel","category-java-8"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1898","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=1898"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1898\/revisions"}],"predecessor-version":[{"id":1899,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1898\/revisions\/1899"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=1898"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=1898"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=1898"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}