{"id":26,"date":"2006-12-20T08:55:00","date_gmt":"2006-12-20T08:55:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=26"},"modified":"2013-05-08T22:33:12","modified_gmt":"2013-05-08T20:33:12","slug":"closures-muss-das-wirklich-sein","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2006\/12\/closures-muss-das-wirklich-sein\/","title":{"rendered":"Closures &#8211; Muss das wirklich sein?"},"content":{"rendered":"<p>Nach dem vierten Proposal (<a href=\"http:\/\/www.javac.info\/closures-v04.html\">http:\/\/www.javac.info\/closures-v04.html<\/a>) f\u00fcr Closures von Gilad Bracha, Neal Gafter (der mit dem Java-Puzzlers), James Gosling und Peter von der Ah\u00e9 (nach seiner Whishlist unter <a href=\"http:\/\/blogs.sun.com\/ahe\/entry\/java_se_7_wish_list\">http:\/\/blogs.sun.com\/ahe\/entry\/java_se_7_wish_list<\/a> werden weitere abgefahrene Sachen m\u00f6glich sein) wird in der Community heftig diskutiert, ob Closures n\u00f6tig sind. Ich finde sie toll! Zwar sehe ich schon meine Teilnehmer \u00fcber den Ausdr\u00fccken br\u00fcten und zweifeln an der Aussage &#8222;Java ist eine einfache objektorientierte Programmiersprache&#8220; zweifeln, doch denke ich, dass es unausweichlich ist, Java mehr sprachliche M\u00f6glichkeiten zu bieten.<\/p>\n<blockquote><p>Java: A simple, object-oriented, network-savvy, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, dynamic language [&#8230;] Java omits many rarely used, poorly understood, confusing features of C++ that in our experience bring more grief than benefit. [<a href=\"http:\/\/java.sun.com\/docs\/overviews\/java\/java-overview-1.html\">http:\/\/java.sun.com\/docs\/overviews\/java\/java-overview-1.html<\/a>]<\/p><\/blockquote>\n<p>Dass Java im Moment so viele Ver\u00e4nderungen erf\u00e4hrt ist vielleicht auch eine Frage der Wahrnehmung. Sun war mit Grammatik\u00e4nderungen bisher sehr konservativ und seit mehr als 10 Jahren haben wir bis auf den Wechsel von Java 1.0 auf Java 1.1 und Java 1.4 auf Java 5.0 kaum \u00c4nderungen gesehen; <a href=\"http:\/\/en.wikipedia.org\/wiki\/Strictfp\">strictfp<\/a>\/<a href=\"http:\/\/java.sun.com\/docs\/books\/jls\/strictfp-changes.pdf\">Sprach\u00e4nderungen<\/a> w\u00e4re man so ein Au\u00dfenseiter. Nun gibt es st\u00e4rkere Ver\u00e4nderungen, wie wir sie bei anderen Sprachen auch erleben. C# hat sich in den letzten Jahren unglaublich ver\u00e4ndert &#8212; was als Java-Klon begann, ist heute eigenst\u00e4ndig und als Sprache hoch innovativ. Mitunter starke strukturelle \u00c4nderungen lassen sich auch bei Skriptsprachen ausmachen, etwa Python (trin\u00e4rer Operator, <a href=\"http:\/\/www.python.org\/dev\/peps\/pep-0341\/\">try\/except\/finally<\/a>),\u00a0PHP (die ganzen OOP-Eigenschaften), Perl (f\u00fcr <a href=\"http:\/\/dev.perl.org\/perl6\/\">Perl 2.6<\/a> ebenfalls \u00c4nderungen der <a href=\"http:\/\/www.perl.com\/pub\/a\/2000\/09\/perl6mail.html#perl6languageobjects\">OOP-Schreibweise<\/a>\/perl6-language-objects und funktionale Programmierelemente geplant) aber auch C++ und SQL. Als Java-Entwickler hat uns Sun nur in den letzten Jahren so &#8222;erzogen&#8220; dass es kaum gro\u00dfe \u00c4nderungen gab, was sich nun \u00e4ndert. Hier muss Sun uns also wieder &#8222;umerziehen&#8220;.<\/p>\n<p>Dass Java keine einfache Programmiersprache ist, m\u00fcsste jedem eigentlich bewusst geworden sein, der didaktisch versucht, Konzepte wie Generics zu vermitteln. Unternehmen m\u00fcssen auch mit nicht-Cracks Software entwickeln k\u00f6nnen und k\u00f6nnen nicht darauf bauen, dass alle Mitarbeiter Spezifikationen lesen und Best-Practices befolgen. (IMHO kann man mit OOP-Spezialisten in jeder Programmiersprache exzellente Ergebnisse erziehlen.) Eine Sprache muss daher auch immer ein bisschen Narrensicher sein. (Ein kleiner Seitenhieb auf Perl, der Sprache, der man &#8222;Write Once Read Never&#8220; (WORN) nachsagt.) Da sehe ich in Closures auf jeden Fall ein Problem, denn w\u00e4hrend Generics doch noch einfach zu lesen sind (von der Deklaration sprechen wir nicht!) sieht das bei Closure-Nutzungen etwas anders aus. Hier muss der Java-Entwickler wieder eine neue Syntax lernen.<\/p>\n<p>Bisher ist in der neuen Syntax kein Wort von neuen Schl\u00fcsselw\u00f6rtern. Das macht die Anwendung einfacher als es bei Java 5 mit enum war. Ein weiterer Punkt ist, dass man \u00fcber allgemeine Closures Dinge schreiben kann, die wie spezielle L\u00f6sungen aussehen. Ein h\u00e4ufig zitiertes Beispiel ist der Lock:<\/p>\n<pre>withLock( lock ) {\r\n\u00a0\u00a0\u00a0 System.out.println( \"Closures in Java 7\" );\r\n}<\/pre>\n<p>Das ist eine Kurzform f\u00fcr<\/p>\n<pre>\u00a0\r\nwithLock( lock, {=&gt;\r\n\u00a0\u00a0\u00a0 System.out.println( \"Closures in Java 7\" );\r\n} );<\/pre>\n<p>Es ist gerade nicht withLock() ein spezielles Java-Konstrukt, sondern nur die Anwendung eines allgemeinen Closures. Intern wird das Umgesetzt \u00fcber \u00fcbliche Schnittstellen. Und mit { =&gt; } sieht man schon, wie Closures in Java aussehen k\u00f6nnen.<\/p>\n<p>In der Summe finde ich Closures toll und freue mich schon. Zwar habe ich schon die ersten Ideen, wie man das didaktisch umsetzen kann, aber mal sehen, was bis dahin geschrieben wird. Was Madbean unter <a title=\"http:\/\/madbean.com\/2006\/closure\/\" href=\"http:\/\/madbean.com\/2006\/closure\/\">http:\/\/madbean.com\/2006\/closure\/<\/a>\u00a0zeigt, finde ich schon nett. Doch bis Java 7 &#8222;freigelassen&#8220; wird, dauert es noch. Wer sich schon einmal vorbereiten m\u00f6chte, der sollte sich zum Beispiel die Pr\u00e4sentation von Neal Gafter unter <a href=\"http:\/\/www.bejug.org\/confluenceBeJUG\/display\/PARLEYS\/Closures+for+Java\">http:\/\/www.bejug.org\/confluenceBeJUG\/display\/PARLEYS\/Closures+for+Java<\/a> anschauen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nach dem vierten Proposal (http:\/\/www.javac.info\/closures-v04.html) f\u00fcr Closures von Gilad Bracha, Neal Gafter (der mit dem Java-Puzzlers), James Gosling und Peter von der Ah\u00e9 (nach seiner Whishlist unter http:\/\/blogs.sun.com\/ahe\/entry\/java_se_7_wish_list werden weitere abgefahrene Sachen m\u00f6glich sein) wird in der Community heftig diskutiert, ob Closures n\u00f6tig sind. Ich finde sie toll! Zwar sehe ich schon meine Teilnehmer \u00fcber [&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":[5],"tags":[],"class_list":["post-26","post","type-post","status-publish","format-standard","hentry","category-java-7"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/26","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=26"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/26\/revisions"}],"predecessor-version":[{"id":1862,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/26\/revisions\/1862"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=26"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=26"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=26"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}