• [^] # Re: Analyse poussée ?

    Posté par . En réponse au journal Raisons pour qu'un État n'investisse pas dans le logiciel libre. Évalué à 2.

    Ben le truc, c'est que tu me donnes un bout de python, de ruby, de c#, fortran, de shell ou n'importe quel autre langage que je ne connais pas, je comprendrais globalement ce que fait le bout de code en question.

    Ya surement des subtilites qui m'echapperont, je ne serais clairement pas capable de l'ecrire moi meme. Mais je comprends au moins l'algo et ce que fait le dit bout de code.

    Bref, en maitrisant bien 2 langages (java et action script), j'arrive a comprendre le code de la plupart des autres langages.
    Sauf Perl.

    Si j'ai bien suivi les explications donnees plus haut (oui, parce que le code est toujours absolument imbittable), ce code est tres tres con.
    Evaluation d'une regexp, extraction de parties de la chaine et concatenation, empilement dans une liste.

    Le probleme apres avec les perleux, c'est plutot que de separer leur truc sur plusieurs lignes pour separer les blocs logique (evaluation regexp, extraction/concatenation, empilement) pour que le relecteur retrouve le cheminement naturel, ils ont une tres grosse tendance a tout mettre sur une seule ligne.
    On dirait presque qu'ils ont peur d'user leur claviers.

    N'importe quel autre langage ecrirait un truc du genre (ici une approximation ecrite en 1 minute en Java, qui a une api regexp plutot pas terrible, desole):


    Pattern pattern = Pattern.compile("bla");
    if(pattern.matches("chaine"))
    {
    MatchResult matchResult = pattern.matcher("chaine").toMatchResult();
    String result = matchResult.group(1).toLowerCase + matchResult.group(3) + "\@var machin";

    types.add(result);
    }


    La c'est trop verbeux parce que l'api regexp de java est plutot pas franchement terrible, ca doit s'aerer un peu dans un langage qui a un support correct des regexp.

    Tu vois clairement les 3 blocs logique apparaitre, tu comprends direct ce qu'il se passe sans devoir rentrer en detail dans chaque ligne.
    Pas besoin de commentaires ici non plus, le code est explicite.

    Alors, oui, le code passe de 5 lignes a 1 seule.
    Le pb c'est que c'est incomprehensible pour qui n'a pas ecrit ledit code (et ya moins de 2 jours, parce que ce genre de pirouettes, on oublie vite comment ca marchait).
    Mettre 3 operations differentes sur une seule et meme ligne, c'est idiot, personne ne peut comprendre ce qu'il se passe.

    Dans une recette de cuisine, quand il faut, a la suite, faire fondre le beurre, revenir les oignons et cuire les legumes, on l'ecrit sur 3 lignes, pas une seule, sinon c'est incomprehensible.
    La c'est pareil.

    Les one liner, c'est techniquement admirable, ca amuse ceux qui aiment ca, et ceux qui le lisent sont impressiones, c'est cool tout le monde est content.
    Mais d'un point de vue maintenance, quand t'es la pour le boulot, ca vaut pas tripette.

    Donc, certes, Perl en soi peut etre parfaitement lisible, mais la philosophie du langage et celle de ses developpeurs fait qu'en pratique, du perl c'est imbittable.