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 tant qu'enseignant, je veux bien admettre que l'on est parfois trop exigeants avec les étudiants de seconde année. Mais écrire une fonction :

function estEgal(p1, p2)
{
    if (p1 == p2)
    {
        return TRUE;
    }
    else return FALSE;
}

... c'est soit de l'incompétence, soit croire que l'on note à la ligne de code. PEBKAC.
PEBKAC #6537 proposé par Kold Fusion le 27/12/2012 | 43 commentaires | 👍🏽 👎🏽 +217
Ca fait même encore plus propre en remplaçant le test (p1 == p2) par estEgal(p1, p2). On obtient alors

function estEgal(p1, p2)
{
if (estEgal(p1, p2))
{
return TRUE;
}
else return FALSE;
}

Ça permet d'avoir un chauffage à moindre coût (avant un éventuel stack overflow).
Commentaire #70675 écrit par Link le 27/12/2012 à 08h44 | 👍🏽 👎🏽
Function maine(a);

If (a == 1) then main();
Else main();
EndIf

Bah oui, car on a toujours un Main en C !! Mais ça fait bien plus propre, comme ça.
Commentaire #70677 écrit par Aaargh!!! le 27/12/2012 à 08h56 | 👍🏽 👎🏽
Mettre sa voiture sur dépanneuse et conduire la dépanneuse partout, c'est bien plus propre : au bout de 5 ans tu peux la revendre comme neuve, c'est bien plus propre.
Commentaire #70678 écrit par Aaargh!!! le 27/12/2012 à 08h57 | 👍🏽 👎🏽
Je suis pas pro-devellopeur mais je comprend pas bien où est l'erreur ici... bien qu'une tel fonction n'a aucune utilité xD à moins que ce soit la que se situe le pebcak...
Captain obvious?
Commentaire #70680 écrit par Zimeau le 27/12/2012 à 09h00 | 👍🏽 👎🏽
Absolument Zimeau.

Cette fonction n'a strictement aucun intérêt, et ralenti le code plus qu'autre chose (sauf si le compilateur a été plus malin que le développeur, et a remarqué la supercherie).

/s'envole vers les cieux
Commentaire #70682 écrit par Captain Obvious le 27/12/2012 à 09h06 | 👍🏽 👎🏽
Merci Captain! ^^
Commentaire #70687 écrit par Zimeau le 27/12/2012 à 09h37 | 👍🏽 👎🏽
J'ai une question quand même : c'est quoi le langage ?
On dirait du C, mais quand même, étant prof, l'auteur n'aurait pas fait l'erreur d'écrire "function" au lieu de "int" (ou bool s'il y a eu les #define idoines, ce qui semble être le cas vu la présence de TRUE et FALSE).

On dirait aussi du javascript, mais dans ce cas on s'attendrait à avoir true et false en minuscules.

Donc, auteur, c'est quoi ce langage ?
Commentaire #70691 écrit par FBM le 27/12/2012 à 10h18 | 👍🏽 👎🏽
Et personne ne se plaint car il manque les { } autour du bloc "else" ?!? Tant qu'à faire des lignes pour rien, autant le faire correctement !

function estEgal(p1, p2)
{
if (p1 == p2)
{
return TRUE;
}
else
{
return FALSE;
}
}
Commentaire #70692 écrit par Zatto le 27/12/2012 à 10h20 | 👍🏽 👎🏽
Yes tant qu'à faire...

Sinon il n'y à pas d'erreur dans le chose hormis que ca tient en une ligne.

return (p1 ==p2);

Sinon la fonction n'a pas d'intérêts sauf qu'il s'agit d'un cours donc purement pédagogique.
Commentaire #70695 écrit par achille le 27/12/2012 à 10h27 | 👍🏽 👎🏽
La fonction n'a aucun intérêt, on sera tous d'accord que p1 == p2 est amplement suffisant. Mais ça dépend la seconde année aussi, par exemple à la fac c'est un peu normal de retrouver ce genre de code (les étudiants se veulent verbeux afin d'essayer de comprendre ce qu'ils font, je trouve pas ça spécialement mauvais si ensuite ils essaient d'affiner leur code).

Enfin bon, je ne vois pas pourquoi on parle d'incompétence aussi tôt (je suppose que c'est à la fac, en effet à l'IUT ça serait un peu plus grave), ils sont là pour apprendre après tout, non?
Commentaire #70699 écrit par Sonny le 27/12/2012 à 11h11 | 👍🏽 👎🏽
Ca peut aussi être du pseudo-code ^^
Commentaire #70700 écrit par Sonny le 27/12/2012 à 11h13 | 👍🏽 👎🏽
Au cas où tu l'ignorerais, c'est plus une convention qu'une contrainte pour une ligne de code.
Commentaire #70706 écrit par mini le 27/12/2012 à 11h24 | 👍🏽 👎🏽
Le concept d'égalité est assimilé bien avant de se mettre à la programmation, tu es censé juste apprendre la syntaxe ou presque à ce niveau ...
Commentaire #70707 écrit par mini le 27/12/2012 à 11h25 | 👍🏽 👎🏽
Perso, j'aurai écrit (en pseudo-code):

function estEgal(p1, p2)
{
register var ret;
var i; //non utilisée

asm
{
NOP
}

if (p1 == p2)
{
ret = TRUE;
}
else
{
ret = FALSE;
}

return ret;
}
Commentaire #70711 écrit par Shirluban le 27/12/2012 à 11h36 | 👍🏽 👎🏽
Le PEBKAC, c'est que je vois régulièrement ce genre de code en entreprise...
Commentaire #70713 écrit par Noraaj le 27/12/2012 à 11h47 | 👍🏽 👎🏽
Je suis certain que le compilateur gère très bien la stupidité booléenne, par contre je ne pense pas qu'il aille jusqu'à simplifier l'appel de la fonction en l'appel de l'opérateur de comparaison.
Si quelqu'un peut confirmer ou infirmer et aller jusqu'à identifier les variables temporaires crées et autres instructions gâchées, je serais intéressé !
Commentaire #70715 écrit par Noraaj le 27/12/2012 à 11h52 | 👍🏽 👎🏽
« Les étudiants se veulent verbeux afin d'essayer de comprendre ce qu'ils font. »

return (p1 == p2); // Test d'égalité
Commentaire #70717 écrit par 1138 le 27/12/2012 à 11h54 | 👍🏽 👎🏽
Sauf qu'arrivés devant l'ordinateur, devant le prof en cours ou en TD, ils ne connaissent plus rien des mathématiques niveau, mettons, CE1.
Commentaire #70720 écrit par TD le 27/12/2012 à 11h57 | 👍🏽 👎🏽
A ma connaissance, non, aucun compilateur n'est capable d'optimiser ce genre de situation...
Commentaire #70721 écrit par Garf365 le 27/12/2012 à 11h58 | 👍🏽 👎🏽
CE1, uniquement pour les plus doués...
Commentaire #70722 écrit par Garf365 le 27/12/2012 à 12h00 | 👍🏽 👎🏽
Mais c'est juste pour prévoir tout évolution et apporter de la souplesse voyons!

Et puis comme ça, on peut faire de l'optimisation plus facilement : quand un chef vient demander d'améliorer les vitesses d'exec, on peut faire chuter facilement les temps comme ça!
Commentaire #70724 écrit par Garf365 le 27/12/2012 à 12h02 | 👍🏽 👎🏽
Ça manque de goto.
Commentaire #70728 écrit par mini le 27/12/2012 à 12h23 | 👍🏽 👎🏽
Il fait du zèle dis donc ce développeur en herbe !!
Un tour dans une mine gnome à travailler 26h sur 24 pour un demi salaire, et il va vite changer je vous le dis !!
Parti comme ça il est plus proche des 36h sur 24, une aubaine pour les gnomes recruteurs !!
Commentaire #70730 écrit par Le gnome le 27/12/2012 à 12h25 | 👍🏽 👎🏽
P'tetre que p1 et p2 sont des données complexes et que plus tard la fonction estEgal sera amenée à faire d'autres traitements pour considérer égales les deux variables.

Mais que pendant le développement, les structures sont de simples chaines et donc l'opérateur d'égalité suffit.

C'est donc un bon réflexe d'encapsuler pour prévoir l'évolution des données.

(Bon j'extrapole surement, mais qui sait ?)
Commentaire #70733 écrit par niahoo le 27/12/2012 à 12h52 | 👍🏽 👎🏽
Mais non, si vous voulez faire du vrai code dégueulasse, faut exploiter la puissance de php :

function istrue() { return true; }

function isfalse() { return false; }

function estEgal($p1, $p2)
{
$vrai = "true";
$faux = "false";
$istrue = "istrue";
$isfalse = "isfalse";

if($p1 == $p2) { $resultat = vrai; }
else { $resultat = faux; }

$func = "is" . $$resultat;
return ${$func}();
}

Ne vous inquiétez pas pour les constantes non déclarées, php étant un langage de vrai pro, il assume que ce sont des chaines. Nan, pas d'erreur fatale, attend c'est pour les pros.

C'est en découvrant que ce genre d'infamie était possible en PHP que j'ai définitivement abandonné ce langage.
Commentaire #70734 écrit par Hart le 27/12/2012 à 12h57 | 👍🏽 👎🏽
En C++, le mot-clef "inline" permet au compilateur de remplacer, à la compilation, l'appel d'une fonction par le code contenu dans la fonction (comme une grosse macro, en plus propre).

Et si je me rappelle bien, certains compilateurs peuvent analyser les fonctions qui peuvent être mises en inline.

Mais bon, ça commence à remonter le C++ pour moi.
Commentaire #70740 écrit par Raizarachi le 27/12/2012 à 13h22 | 👍🏽 👎🏽
M'en parle pas !!!

Mon prédécesseur, ainsi que tous les développeurs dans mon équipe n'arrêtent pas de faire ça. Et quand j'essaye pour la n-ième fois de leur expliquer que c'est pas la peine, je me heurte à un mur d'incompréhension...

Ce qu'ils aiment bien faire aussi, dans la même branche, c'est ça :

bool x;

[...]

if(x == true)
return true;
else
return false;
Commentaire #70744 écrit par Raizarachi le 27/12/2012 à 13h26 | 👍🏽 👎🏽
De mon point de vue, ce n'est pas le fait que ce soit possible qui est une infamie, les possibilités du langage peuvent même avoir des côtés intéressants du point de vue réflexion. C'est le fait que des pseudo-développeurs, qui n'ont absolument aucune idée de ce qu'il font, ont accès à de telles fonctionnalités qui est aberrant...
Commentaire #70746 écrit par Raizarachi le 27/12/2012 à 13h32 | 👍🏽 👎🏽
Il n'y a même pas besoin des accolades autour du if dans la plupart des langages que je connais...
Mais bon si son but avec cette fonction est de faire le plus de lignes de code possible, alors oui, il aurait pu les rajouter
Commentaire #70747 écrit par tony83 le 27/12/2012 à 13h34 | 👍🏽 👎🏽
On dit « Je ne suis pas développeur pro ». Là on a l'impression que tu es anti-développeur...
Commentaire #70749 écrit par BSK le 27/12/2012 à 13h39 | 👍🏽 👎🏽
Il est prêt pour la POO au moins :)
Commentaire #70762 écrit par X3N le 27/12/2012 à 15h43 | 👍🏽 👎🏽
Dans ce cas il suffira de surcharger == .

On peut en c++ nan?
Commentaire #70764 écrit par Foxkilt le 27/12/2012 à 15h56 | 👍🏽 👎🏽
Du gloubi-boulga.
Commentaire #70783 écrit par Banon le 27/12/2012 à 17h48 | 👍🏽 👎🏽
Et de COMEFROM !
Commentaire #70787 écrit par Navi le 27/12/2012 à 17h56 | 👍🏽 👎🏽
*étudiant de seconde année*
Donc je doute qu'il s'agisse d'un projet de millions de lignes de code devant être maintenu de façon exemplaire.
Commentaire #70801 écrit par mini le 27/12/2012 à 19h03 | 👍🏽 👎🏽
Tu peux aussi faire des trucs immondes en C, ça n'en rend pas pour autant ce langage pourri. Il faut savoir utiliser son potentiel, c'est tout.
Commentaire #70802 écrit par mini le 27/12/2012 à 19h04 | 👍🏽 👎🏽
Je ne connaissais pas le comefrom, ça à l'air fantastique. Tu as des exemples de mise en oeuvre?
Commentaire #70813 écrit par Link le 27/12/2012 à 21h32 | 👍🏽 👎🏽
Sauf qu'en général, les trucs immondes se trouvent dans la mauvaise logique du développeur, et pas dans les "fonctionnalités" de l'interpréteur, qui ne se trouvent curieusement nulle part ailleurs, tant elles sont à la fois dangereuses, improbables, et génératrices de mauvaises habitudes et de difficultés de débuggages.
Commentaire #70816 écrit par Hart le 27/12/2012 à 22h55 | 👍🏽 👎🏽
désolé @Garf365, avec un GCC récent, en -O2 sur x86, cette fonction hideuse génère le même code qu'un simple "return (a == b);", à savoir

xor eax, eax
cmpl esi, edi
sete eax
Commentaire #70821 écrit par b0fh le 28/12/2012 à 03h22 | 👍🏽 👎🏽
Possible, mais à partir du moment ou l'auteur du post est, semble-t-il, l'enseignant qui doit
noter le code, alors la fonction aurait due être finie.
Commentaire #70823 écrit par Elissa :-) le 28/12/2012 à 03h25 | 👍🏽 👎🏽
Merci beaucoup B0fh !
Commentaire #70997 écrit par Noraa le 29/12/2012 à 03h13 | 👍🏽 👎🏽
Autre "norme" géniale rencontrée (ou habitude de dev enracinée, mais on a déjà essayé de me la soutenir) : toutes les fonctions regroupées dans des classes communes (dans un contexte précis, mais passons) DOIVENT throw Exception (dans leur signature, hein).
Tu fais return x+y dans une fonction? pas grave, throw Exception ! Très pratique quand tu te décide après d'écrire au passage le résultat dans un fichier, et que tu n'as aucun moyen forcé de te rendre compte que tu peux maintenant générer des IOExceptions, qu'il faudrait ptetr gérer.

Pour ceux ne connaissant pas Java, Exception est une des classes dont toutes les erreurs (ou presque) dérivent. Définir dans la signature d'une méthode qu'elle lève Exception masque les différentes erreurs réelles (enfin plus finement définies) que la méthode lève, perdant tout l'intérêt de la gestion d'erreur de Java.
(disclaimer : je suis peut-être un peu à côté de la plaque, vous savez, mes méthodes throw Exception -_- )
Commentaire #71000 écrit par Noraa le 29/12/2012 à 03h34 | 👍🏽 👎🏽
http://wiki.theory.org/YourLanguageSucks#PHP_sucks_because:
Les autres langages ont leur doses d'incohérences, mais je crois que PHP remporte la palme.
Commentaire #71001 écrit par Noraa le 29/12/2012 à 03h45 | 👍🏽 👎🏽