• [^] # Re: Explicit is better than implicit.

    Posté par (Mastodon) . En réponse au journal Perl, Javouille, Lisaac|(Ruby|SmallTalk|etc..). Évalué à 2.

    j'ai bien tenté de me mettre à ruby, mais ces différentes syntaxes pour exprimer la même chose, et tous ces hiéroglyphes (et caractères qu'il faut shifté pour insérer) m'ont fortement rebuté

    C'est marrant, pour moi les différentes syntaxes sont un atout, car elles permettent d'écrire du code auto-documenté. En partique, "if" et "unless" servent à la même chose, mais utilisés correctement ils rendent le code plus clair:
    - if: si une condition est vraie, on fait ce bout de code
    - unless: généralement on ne fait pas ce bout de code, sauf si...

    De même, "while" et "until" servent à la même chose mais dans des conditions différentes. Ce sont de petites nuances qui, pour moi, facilitent la lecture du code, parce que ça permet de mettre l'accent sur ce qui est important.

    Toujours dans la même idée, j'aime pouvoir écrire "5.times" pour une boucle qui doit s'exécuter 5 fois, "0.upto(4)" pour une boucle qui va de 0 à 4 et "tab.each" pour une boucle qui parcourre un tableau. Ce sont pour moi trois écritures qui mettent l'accent sur ce qu'on veut faire, et les trois ont des raisons d'exister.

    Quel est le bout de code qui demande le plus de réflexion entre les deux suivants ?

    for (int i=5 ; i >= 0; i--) {
    printf("%d\n", i);
    }


    5.downto(0) { |i|
    print "#{i}\n"
    }


    Ce sont deux bouts de code très simples, donc n'importe qui de familier avec la syntaxe des langages les comprend très vite. Dans les deux, je dois regarder la valeur de début, la valeur de fin et le nom de la variable. Mais dans le code en C, je dois regarder le sens de la condition, est-ce que c'est supérieur strict ou égal, et quel est l'incrément, pour vérifier ce que la boucle fait. En ruby, on écrit explicitement "down to", et donc je ne peux pas avoir de doute.

    Après, plusieurs manières d'écrire les choses ça peut vouloir dire plus de choses à apprendre pour comprendre le code des autres. C'est le cas en Perl. En Ruby, je ne suis pas d'accord. Prenons les exemples que j'ai donnés pour les boucles: pour peu qu'on parle anglais, les trois sont parfaitement explicites et ne demandent pas d'explication. N'importe qui comprendra que "5.times" va faire quelque chose cinq fois. De même pour "0.upto(4)", "4.downto(0)" et autres.