>> Anonymous Functions.

Published by on 2008-12-27 12:34:37

Nachdem Javascript (und begrenzt auch Python / Ruby) in den letzten Jahren bei vielen Entwicklern das Mindset geprägt haben, kommen nun nach und nach die wundervollen anonymen Funktionen aus Javascript in andere Sprachen. Zur Einführung ein kurzes Beispiel aus Javascript:
['Hitch', "Hiker's", 'Guide', 'To', 'The', 'Galaxy'].collect(function(s) {
return s.charAt(0).toUpperCase();
}).join('') // -> 'HHGTTG'

Man spart es sich, irgendwo im Objekt eine recht nutzlose Funktion abzulegen, die nur für den Sortiervorgang relevant ist.

Mit Snow Leopard kommt diese tolle Technologie nun auch in Objective-C an:
newArray = [existingArray map:^(id obj){ return [obj stringByAppendingString:@"suffix"]; }];

Darüber hinaus! PHP 5.3 kommt auch mit ähnlichen Features.

Find ich super.

Categorised as: News

7 Comments

  • Comment from lgw on 2008-12-27 18:46

    Aus Strukturtechnischer Sicht sehe ich so etwas eigentlich eher mit Sorge; die Gefahr, nicht wiederverwertbaren Code zu basteln, steigt massiv.

    Ein schönes Werkzeug für bestimmte Aufgaben, aber belegt mit einer wahnwitzigen Missbrauchsgefahr... naja, das sind Küchenmesser auch ;)

  • Comment from impi on 2008-12-27 18:57

    Ja, ich habe auch an Jobsicherungsmaßnahme für Entwickler gedacht, als den Beitrag gelesen habe ;)

  • Comment from bene on 2008-12-27 19:19

    Ihr habt offensichtlich noch nicht genug mit anonymen Funktionen gearbeitet ;-)
    Der Code wird sogar weitaus lesbarer, weil (im obigen Beispiel) die Funktion, die sich direkt auf einen Sortiervorgang eines Arrays bezieht, die also nur FÜR diesen Sortiervorgang existiert, genau an der Stelle steht, an der der Vorgang auch durchgeführt wird. An jeder anderen Stelle ist sie falsch platziert. Nur war es vorher halt schwer möglich, sie vernünftig dort zu platzieren.

  • Comment from Sel on 2008-12-27 20:19

    sogar ich hab das verstanden. und ich kann gar nicht programmieren

  • Comment from Florian on 2008-12-27 21:24

    Ich find's auf jeden Fall schöner als create_function

  • Comment from lgw on 2008-12-28 01:36

    Natürlich habe ich schon mit sowas gearbeitet, und mir ist der Vorteil schon klar. Die Frage ist eher, wie oft der gemeine Programmierer diese Struktur wie von dir beschrieben korrekt einsetzt, und wie oft schwachsinnigerweise Funktionen auf diese Weise an 30 Stellen im Sourcecode stehen, ala

    foreach (i in elem) do
    function (e)
    echo (e.firma!="" ? e.firma : e.vorname e.nachname)

    statt einem vernünftigen

    foreach (i in elem) do
    function (e)
    echo e.getAdressName()

    Verständlich ausgedrückt?

    Anders gesagt: es fällt dem gemeinen Code-Affen oft nicht leicht zu unterscheiden, ob der Code wirklich "nur" an dieser Stelle benötigt wird, oder eigentlich doch eher zum Model als zur Prozesslogik gehört. Und da wird's dann halt kritisch (in meinem Beispiel hat man dann 20 verschiedene Definitionen für die Kundenansprache verstreut in allen möglichen Teilen des Codes, wo sie definitiv nicht hingehören dürften...).

    Das macht es nicht grundsätzlich falsch so zu strukturieren, im Gegenteil - es ist nur der typische erhobener Zeigefinger des Struktur-Affen ;)

  • Comment from bene on 2008-12-28 13:29

    Ok, natürlich. Solche Leute können nur halt nicht nur mit dieser Implementierung nicht vernünftig umgehen, sondern da scheiterts doch vielfach auch schon weit vorher, nämlich eben bei sauber konstruierten Objekten nach OOP Paradigmen, MVC und Design Patterns.
    Da sind anonyme Funktionen ja nur noch das kleinere Übel, wenn schon vorher einiges in den Sand gesetzt wurde. Ich denke da an einen gemeinsamen Bekannten von uns, der selbst *heute* noch jegliche Nutzung von irgendwelchen OOP Prinzipien nicht rallt und einfach sein lässt. Hilfe :)