Bienvenue sur PEBKAC.fr, le site qui recense les anecdotes où l’on se moque des utilisateurs ne maîtrisant pas l’outil informatique. PEBKAC est un acronyme signifiant « Problem Exists Between Keyboard And Chair ».
Le problème se situe entre la chaise et le clavier : soumettez vos histoires, donnez votre avis !
Ce site n'est pas le site original pebkac.fr. Je publie ici la liste des PEBKAC que j'ai pu sauvegarder avant que le site original ne soit mis hors ligne.
En regardant dans le code d'un ingénieur-stagiaire diplômé (c'est un ingénieur qui a eu son diplôme, mais qui a les mêmes habitudes et la même efficacité qu'un – mauvais – stagiaire), j'ai surpris des perles comme :
int inc = 100 > 0 ? 1 : -1;
Pour gérer le sens de l'incrément d'une boucle for de 0 à 100, et, un peu plus bas :
inc = 0 > 100 ? 1 : -1;
Pour parcourir la même boucle, mais de 100 à 0 cette fois.

Et pour tout vous avouer, vu son niveau, je suis même surpris qu'il ait pensé à utiliser une condition ternaire (après tout, je ne lui avais expliqué QUE neuf fois l'utilité d'une telle syntaxe, et la lourdeur d'une syntaxe if […] else pour une assignation de variable… PEBKAC.
PEBKAC #8435 proposé par Raizarachi le 25/08/2013 | 24 commentaires | 👍🏽 👎🏽 +113
Pourquoi faire simple quand on peut pondre ça?
Commentaire #108157 écrit par H. Finch le 25/08/2013 à 12h50 | 👍🏽 👎🏽
Peut être une tentative d'obfuscation de code ?
Commentaire #108164 écrit par ygnobl le 25/08/2013 à 13h19 | 👍🏽 👎🏽
Je me demande si ça ajoute pas des risques de bugs?
Commentaire #108168 écrit par Homer le 25/08/2013 à 13h52 | 👍🏽 👎🏽
Et tentative d'offuscation du programmeur qui reprendra le code ensuite.
Commentaire #108169 écrit par Homer le 25/08/2013 à 13h56 | 👍🏽 👎🏽
L'utilité des conditions ternaires c'est un vieux et long débat.

Certains trouvent ça beaucoup moins lisible. (faut dire que t'as des tarés qui te mettent des conditions ternaires dans des conditions ternaires dans des conditions ternaires... mais je connais des extrémistes qui en refusent toute utilisation, même modérée)
Commentaire #108175 écrit par TuXiC69 le 25/08/2013 à 14h15 | 👍🏽 👎🏽
Comme dit, pour faire des assignations de booléens ou ce genre de choses, c'est quand même plus propre.

Après, pondre une imbrication de conditions avec, non.
Commentaire #108178 écrit par neeko le 25/08/2013 à 14h27 | 👍🏽 👎🏽
L'argument que j'avais vu, c'est que ça :

If(condition){
  var=value1;
 } else {
  var=value2;
 }


ça peut être lu de façon intuitive par un humain, c'est presque de l'anglais.

Alors que ça : var = condition ? value1 : value2; c'est incompréhensible sans connaitre cette syntaxe exacte.
Commentaire #108181 écrit par TuXiC69 le 25/08/2013 à 14h38 | 👍🏽 👎🏽
J'ai jamais compris les gens qui utilisent des prédicats ne pouvant qu'être vrais ou faux…
Commentaire #108184 écrit par apprenti_hackeur le 25/08/2013 à 14h50 | 👍🏽 👎🏽
Et ça te fout les Boole ?
Commentaire #108186 écrit par Ishido le 25/08/2013 à 15h13 | 👍🏽 👎🏽
if(condition)
     var = value1;
 else
     var = value2;

Déjà, ça allège et ça enlève les accolades égyptiennes.
Deuxièmement, il y a des cas, en C++ au moins, où on est obligé d'utiliser l'écriture ternaire. Je pense notamment à la méta-programmation template.
Commentaire #108202 écrit par Douxware le 25/08/2013 à 19h11 | 👍🏽 👎🏽
Mais on peut tout à fait combiner les avantages des deux, comme dans plein de langages fonctionnels qui permettent d'écrire quelque chose comme

var = if condition then value1 else value2

Si on considère que l'opérateur ?: est naturellement incompréhensible pour ce travail, on peut faire le même raisonnement pour tous les opérateurs sauf ceux de l'arithmétique de base.
Commentaire #108203 écrit par b0fh le 25/08/2013 à 19h15 | 👍🏽 👎🏽
bool*
Commentaire #108206 écrit par Shadam le 25/08/2013 à 20h09 | 👍🏽 👎🏽
Non, Boole ça marche.
Commentaire #108230 écrit par Pouet le 26/08/2013 à 09h37 | 👍🏽 👎🏽
@TuXiC69 : "c'est incompréhensible sans connaitre cette syntaxe exacte"

Si seulement il existait des trucs qui permettraient de connaître des trucs qu'on ne connaissait pas avant...

Plus sérieusement : C'est un excellent argument pour ne rien faire, parce que même la roue, faut savoir comment ça marche avant de vouloir en mettre une sous ta charrette.
Commentaire #108234 écrit par Geist le 26/08/2013 à 10h02 | 👍🏽 👎🏽
Le problème ici c'est pas l'utilisation de "?:" mais le fait qu'il fasse un test sur 2 valeurs "en dur" à savoir 100 et 0 non ?
Commentaire #108236 écrit par Loutre le 26/08/2013 à 11h39 | 👍🏽 👎🏽
je ne me prononce pas : il avait peut être prévu de rajouter plus de conditions derrière

ça me rappelle un truc : il ne serait pas payé à la ligne de code ou au caractère???
Commentaire #108279 écrit par nonolelion le 26/08/2013 à 14h27 | 👍🏽 👎🏽
C'est une hypothèse intéressante, je propose qu'on fonde un groupe d'étude pour l'investiguer.
Commentaire #108280 écrit par Shirluban le 26/08/2013 à 14h28 | 👍🏽 👎🏽
Du genre:
int inc = 100 > 0 ? 100 < 0 ? -1 : 1 : 100 < 0 ? -1 : 1;
inc = 0 > 100 ? 0 == 0 ? 1 : 100 == 100 ? 1 : 1 : 100 < 0 ? -1 : -1;
Commentaire #108282 écrit par Shirluban le 26/08/2013 à 14h35 | 👍🏽 👎🏽
Je l'aime trop (ton Boole) !
Commentaire #108286 écrit par Picc le 26/08/2013 à 15h17 | 👍🏽 👎🏽
Merci, c'est vrai que c'est quand même beaucoup plus lisible.
Commentaire #108371 écrit par voilà le 27/08/2013 à 10h21 | 👍🏽 👎🏽
Autant ecrire lisiblement vu que le compilo se charge de l'optim. C'est quand même plus propre.
Commentaire #108465 écrit par Dudule le 28/08/2013 à 13h01 | 👍🏽 👎🏽
@Douxware : arh, quand j'étais jeune (y a pas très longtemps) on m'a interdit les conditions sans accolades, pour des questions de lisibilité la encore. C'est un peu con mais ça m'est resté.
Tout comme je ne peux pas supporter les string entre double-quotes en PHP, tellement on m'avait martelé que les simple-quotes étaient + optimisées (ce qui semble être vrai d'après les benchmarks trouvables sur le web, mais la différence est tellement minime qu'elle est souvent négligeable).
Y a des traumatismes comme çà ^^

@Geist : Non. La il y a deux syntaxes logiquement équivalentes (et d'un point de vue performance aussi il me semble, mais j'ai pas checké), dont une lisible intuitivement et pas l'autre.
Si il n'y a qu'une syntaxe possible, incompréhensible ou pas, il n'y a pas de question a se poser.
Commentaire #108825 écrit par TuXiC69 le 31/08/2013 à 15h14 | 👍🏽 👎🏽
moi je trouve tout à faire lisible la version ternaire et parfois je préfère une ligne ternaire que 4
Commentaire #108877 écrit par non le 31/08/2013 à 23h57 | 👍🏽 👎🏽
@Douxware et @TuXiC69 : Les conditions sans accolades sont "interdit" pour la simple et bonne raison que cela augmente grandement les chances de bugs car cela devient plus difficile de voir où commence et où se termine les opérations de ta condition.
Commentaire #109712 écrit par Fieltor le 06/09/2013 à 15h14 | 👍🏽 👎🏽