Yoda, l’ultime ?

(878 mots)

Nouvelle catégorie sur le blog, « sobrement » appelée « programmation ». L’idée ici est de donner quelques tips de programmation reliées à WordPress. On commence avec Yoda.

Yoda dans la pratique

Avec toi la force sera

C’est un style de programmation recommandé, notamment, par les standards de WordPress et qui veut que la variable soit toujours à droite et la valeur à gauche dans la condition pour le dire vite :

if ( true == $the_force ) {
    $victorious = you_will( $be );
}

Derrière cette pratique, on veut éviter le cas où on aurait mis :

 if ( $the_force = true ) {
    $victorious = you_will( $be );
}

ce qui n’est pas une erreur en PHP et peut provoquer une erreur « cachée » dans notre code, à savoir retourner vrai et déclencher systématiquement

$victorious = you_will( $be ); alors que ce n’est pas ce qu’on souhaite.

En notant, en revanche :

if ( true = $the_force ) {
    $victorious = you_will( $be );
}

On obtient une belle erreur PHP qui nous remet dans les rails.

Le zèle avec Yoda est-il un problème ?

Le mieux est de rajouter des égalités strictes pour être plus rigoureux et vérifier le type, cela donnerait :

if ( true === $the_force ) {
    $victorious = you_will( $be );
}

de cette manière on vérifie en plus que

$the_force est bien strictement égale à true (en tant que booléen).

Mais mettre par exemple :

if ( 40000 > $Ki ) {
    $victorious = you_will( $be );
}

devient inutilement complexe à lire, WordPress vous recommande dans ce cas de rester plutôt sur :

if ( $Ki > 40000 ) {
    $victorious = you_will( $be );
}

tranquille, paisible, sans histoire.

Source

Yoda n’est pas une fin en soi

Des exemples

Étant à 100% WordPress, en tout cas jusqu’à maintenant, je m’efforce de respecter ses standards.

Le but de Yoda, encore une fois, c’est d’éviter les comportements bizarres, difficiles à déboguer, une bonne pratique pour ne pas avoir de mauvaises surprises, ne pas se manger le mur après coup, bien bricoler sa bécanne avant de prendre la route pour éviter que ça pète en chemin, enfin vous aurez compris l’image.

MAIS Yoda ne sert qu’à éviter l’erreur d’assignement. Rien de plus.

Par exemple :

if ( Ki_assess() == 20000 ) {
    return'This is your destiny';
}

n’a pas besoin d’une présentation à la Yoda. En PHP, il n’est pas possible d’assigner de cette façon une valeur à une fonction, dans tous les cas, si on omet le deuxième signe « = », on aura une fatale.

L’expérience est similaire en js, celle-là je la fais tout le temps j’avoue :

if ( "undefined" == typeof theData ) {
    var theData = {
        'lol': 'huge'
    }
}

alors que ça sert à rien. Ce n’est pas une erreur et ça ne provoquera pas de mauvais comportement mais c’est inutile car aucune chance de tomber dans le cas que couvre Yoda, il vaudrait mieux écrire dans ce cas :

if ( typeof theData === "undefined" ) {
    var theData = {
        'lol': 'huge'
    }
}

Les anti-Yoda

Yoda a beau être dans les standards c’est souvent rejeté par les développeurs, la plupart du temps expérimentés d’ailleurs. Mais alors pourquoi puisqu’on parle de bonne pratique, ils n’aiment pas ça ?

Je pense qu’ils trouvent que c’est tout simplement dégueulasse ou pour les débutants, la plupart du temps c’est ce qui revient dans les discussions sur les fora.

Mais qui a raison alors ?

Réponse courte : l’expérience.

L’argument des anti Yoda c’est la lisibilité. On a le sourire quand on entend Yoda parler comme ça dans Star Wars mais heureusement que les dialogues s’étendent pas trop sinon on serait peut-être tenté de lui foutre des claques au petit bonhomme à la fin XD.

Yoda serait donc là pour « arranger » les petites affaires de l’auteur du code au détriment de son lecteur odieusement contraint à une gymnastique des méninges pour remettre le tiercé dans l’ordre.

Avis perso et conclusion

Lire de gauche à droite ou de droite à gauche ne me pose pas de souci particulier. Je conçois que cela ne soit pas le cas pour tout le monde. La condition suivante :

if ( 'LOL' === $value )

ne me choque pas .

AMHA les reproches sont à faire à PHP plutôt parce que du code (compilé donc) qui accepte d’assigner une valeur constante dans une condition, je trouve pas ça logique à moins qu’on me trouve des cas auxquels je n’aurais pas pensés mais là je vois pas…

Mais admettons que c’est tellement moche que ça vous donne la gerbe. Malgré ça, le code partagé va bien souvent atterrir en copier-coller sans forcément que tout ait été pigé, bien ou pas bien là n’est pas la question, c’est un fait, donc rien que si je peux éviter le cas où la personne tenterait avec un seul signe « = » pour voir ce que ça fait et aurait un bon résultat et finirait par se dire, bon bah ça marche quand même, je décide que ça pète.

Webographie

Les commentaires sont fermés.