Les Yoda conditions ou if (’42’ == compteur) {

Il y a des trucs que je n’aime pas voir dans du code et qui me hérissent le poil.

Les « yoda conditions » en font partie. L’idée est d’exprimer les conditions dans le code en mettant le partie constante en premier et non plus derrière l’égalité. Ainsi on écrit plus

compteur == 42

mais comme dirait maître Yoda

42 == compteur

Alors pourquoi faire cela ? Les chantres de cette méthode avancent un argument majeur en faveur de cette notation : « cela évite que si on oublie le deuxième égal cela ne se transforme en affectation ».

en effet

if ( count = 42)

est valide alors que

if ( 42 = count )

ne l’est pas.

Effectivement, c’est le cas dans pas mal de language. Et j’ajouterais malheureusement.

Alors pourquoi je trouve cela stupide :

Premièrement ce genre d’erreur sont des erreurs de débutant et normalement un développeur expérimenté ne fait pas cela.  Bien sûr nul n’est à l’abrit d’une erreur.

Deuxièmement je trouve que le compilateur ou interpréteur devrait interpréter « if ( count = 42 ) » comme une erreur. Franchement, affecter une variable dans un if avec une valeur constante c’est vraiment tordu et ne devrait pas être permis. Au passage gcc permet de détecter ce genre d’erreur. Et si c’est le cas, l’écriture inverse n’a aucun sens.

Et enfin pour finir l’argument principal est que ça complique la lecture du code. Et tout ce qui complique la lecture, par principe, je suis contre. Un développeur passe 90% de son temps à lire du code et 10% à en écrire. Donc pourquoi lui compliquer la vie en parlant comme Yoda ?

Les puristes diront que c’est mieux parce que ça fait « maîtrise ». Je suis un master parce que je sais écrire du code complexe. Et là on rentre dans l’égo du développeur et on rentre dans une autre dimension, le non professionnalisme qui ne m’intéresse pas…

À vos commentaires …

Cette entrée a été publiée dans Dev'Zone, avec comme mot(s)-clef(s) . Vous pouvez la mettre en favoris avec ce permalien.

2 réponses à Les Yoda conditions ou if (’42’ == compteur) {

  1. Bonjour Sébastien,

    Si tu le dis, c’est que c’est surement LA Vérité !!
    Je ne me risquerais pas à la contredire, mais un début d’explication est peut-être qu’aujourd’hui, il est de bon ton d’avoir un avis sur tout, y compris et surtout sur ce qu’on ne connaît pas ou peu…
    A force de multiplier les tolérances avec les règles de langage, qu’il soit informatique ou autre, on brouille celles-ci et au bout du compte, on ne sait plus démêler le faux du vrai et de l’à-peu-près !
    L’informatique devrait se permettre d’être plus intolérante avec le respect de sa grammaire, je te donne raison sur ce point ! Ceci dit, j’ai du échapper à quelques soucis grâce à quelques DTD « transitionnal » donc, tout se discute…

    Pour finir, Maître Yoda ne serait-il pas tout simplement anglophone d’origine, ce qui pourrait expliquer des choses ? 🙂

  2. fx dit :

    Bonjour,

    Pas seulement, cela permet dans les langages objets d’éviter de se retrouver sur un nullpointerexception.

    Mais oui c’est la solution qui permet d’éviter des problèmes en production.

    Cordialement.