• [^] # Re: Fonction

    Posté par . En réponse au journal Plonk. Évalué à 4.

    Comme mentionné là, cela n'est pas du verbiage inutile. C'est une construction tout à fait classique dans les langages fonctionnels (ou ceux comme javascript qui le sont à moitié). Dans le monde objet, on parlerait de « design pattern » (Je ne cautionne pas du tout ce terme, mais c'est une autre histoire).

    J'abonde : je ne programme pas avec un langage fonctionnel, mais je m'y suis essayé plusieurs fois (et j'ai eu à coder pas mal de LISP il y a longtemps), et ce genre de construction ne me semble pas plus absconse que ce qui doit être fait pour implémenter l'équivalent d'un foncteur ou un fonctoïde en C (à grands coups de pointeurs de fonction1 ).

    Pire : au moins en Perl, malgré l'existence de my, our, local, etc., on a parfois besoin de recourir à quelque chose d'équivalent. C'est un prix à payer pour la flexibilité du langage. Bref. Je trouve qu'il n'est pas pire d'écrire un truc du genre

    (function(arg1, arg2, arg3) {
     // code
    })(p1,p2,p3); // pas besoin de nom puisqu'on ne va jamais réellement rappeler ce code plus tard.

    ... plutôt que

    var f = function(arg1, arg2, arg3, ...) {
     // code 
    }
    f(p1,p2,p3); // on appelle la fonction une seule fois ici

    En Java il y a aussi des idiomes similaires, par exemple :

    // Création d'un nouveau thread "anonyme"
    (new Thread( new Runnable() { 
     // Nouvelles variables ici
     public void run() {
     // code
     )
    }).start();

    Il y a tout un tas de subtilités sur comment/quand tu peux rajouter des variables et quelle syntaxe adopter que je n'ai pas le courage de me remémorer. Maintenant que Java est quand même mieux fichu en termes de syntaxe, etc., ces constructions sont peut-être considérées comme archaïques, mais pendant un bon moment c'était quelque chose qu'on pouvait retrouver couramment dans du code.


    1. Et généralement, on finit par utiliser typedef partout tellement c'est compliqué de correctement écrire ce qu'on veut lorsqu'on commence à avoir des tableaux de pointeurs de fonction ou pire...