• [^] # Re: Ca traduit bien un état d'esprit de la part des développeurs de systemd

    Posté par . En réponse au journal Systemd vs Linux, quand l'intransigeance d'un développeur tourne au ridicule.... Évalué à 2.

    La concision dans n'importe quel langage peut se révéler illisible. Je ne connais pas zsh (je ne le pratique pas du tout), donc en effet la ligne que tu fournis m'est hermétique. Pourtant, avant de me dire que franchement, quel est l'idiot qui a écrit la ligne ainsi, je me poserais la question de ce que la ligne fait, et oui, je passerais le temps à essayer de comprendre avant d'émettre une opinion.

    Évidemment, en Perl je peux me passer d'utiliser use warnings; use strict;, de même qu'en C je peux écrire un truc du genre

    /* Returns a value <0 if p1<p2, >0 if p1>p2, and 0 if p1=p1.*/
    int intcmp(const void* p1, const void* p2) 
    {
     return *(int*)p1 < *(int*)p2 ? -1 : 
     *(int*)p1 > *(int*)p2 ? 1 :
     0;
    }

    ... qui, malgré l'alignement, est franchement difficile à lire. Ou bien, je peux écrire la même fonction ainsi :

    /* Returns a value <0 if p1<p2, >0 if p1>p2, and 0 if p1=p1.*/
    int intcmp(const void* p1, const void* p2) 
    {
     int i1 = *(int*)p1,
     i2 = *(int*)p2;
     return i1 < i2 ? -1 : 
     i1 > i2 ? 1 :
     0;
    }

    ... Qui est déjà plus lisible.

    Bien entendu, pour faire encore plus lisible, il serait sans doute mieux d'écrire ceci :

    /* Returns a value <0 if p1<p2, >0 if p1>p2, and 0 if p1=p1.*/
    int intcmp(const void* p1, const void* p2) 
    {
     int i1 = *(int*)p1,
     i2 = *(int*)p2,
     retval;
     if (i1 < i2) retval = -1;
     else if (i1 > i2) retval = 1;
     else retval = 0;
    }

    Mais au final, la version qui pour moi est la plus lisible et efficace est celle-ci :

    /* Returns a value <0 if p1<p2, >0 if p1>p2, and 0 if p1=p1.*/
    int intcmp(const void* p1, const void* p2) 
    {
     return *(int*)i1 - *(*int*)i2;
    }

    ... Et ça vient, entre autres, de la concision de l'écriture (moins de choses à lire = moins de choses à comprendre).

    Évidemment je suis d'accord avec toi pour dire que la concision juste pour la concision est une mauvaise chose1. Je n'ai aucun problème avec la critique d'un langage (il y a plein de choses à critiquer en Perl, en C, en bash, sans doute en zsh etc.). Mais ta phrase impliquait une généralité sur Perl (et zsh, mais je n'ai pas répondu car je ne connais pas ce shell), ce qui m'a effectivement fait réagir.

    [1] et le code que j'ai écris en C comme en Perl dans mon message précédent n'a pas été écrit pour faire « plus joli » ou pour forcer le trait que Perl est lisible : je code à peu près comme ça en Perl.