• [^] # Re: Ah! C'est la saison de la galinette cendrée!

    Posté par . En réponse au journal Go : Un nouveau langage chez Google. Évalué à 2.

    Quand tu écris la formule sur une feuille, tu écris bien
    45020089
    -------------
    8!


    tu peut aussi écrire :
    45020089
    --------------- !
    8
    Quand tu écrit la division sous cette forme, ça revient à mettre des parenthèses. Dans ton code par contre l'ambiguïté demeure.

    Et que ce soit programmé par des gens avec de bonnes intentions et le faisant de manière très logique ne change rien au problème. Avoir le même opérateur avec une priorité différente et une sémantique différentes suivant le type rend le programme beaucoup plus difficile à lire.

    Si tu surcharge les opérateurs pour un type vecteurs par exemple, il devient naturel de ce demander si le '*' correspond au produit par composantes, au produit vectoriel au produit scalaire. Tu trouvera toujours des gens plein de bonnes intentions qui trouverons des raison parfaitement valable de choisir l'un plutôt que l'autre.
    Le gros problème c'est que quand tu te retrouve face à leur code, tu te demandera toujours si le mec qui à codé la lib à la même logique que toi.

    C'est, pour moi, un des plus gros points noir du C++. Combien de fois je me suis retrouver devant un code ou un mec à cru malin de redéfinir les opérateur pour rendre son code plus concis par la suite et en théorie plus clair... la plupart du temps tout ce que l'on obtient c'est un code extrêmement difficile à débugger car une expression qui semble évidente fait quelque chose auquel on aurait même pas penser dans nos pire cauchemars.

    Donc, la surcharge d'opérateur est pour moi quelque chose d'encore plus dangereux que les pointeurs car ses effets pervers peuvent être quasiment invisibles, là ou un pointeur est bien visible. Quand je vois un pointeur, je sais que je dois faire particulièrement attention, pour les opérateur, il est dur de dire s'il y a danger ou pas.