• [^] # Re: Quel avenir?

    Posté par (Mastodon) . En réponse au journal Go 1. Évalué à 3.

    Sauf que tu oublies une précédence que tu utilises sans t'en rendre compte, celle de l'affectation =, car oui, = est un opérateur en C et dans la plupart de ses descendants, avec une précédence qui lui permet d'être exécuté en dernier. Donc, si je suis ton raisonnement, on devrait par exemple écrire :

    a = (3 + 4)
    
    

    Mais personne ne le fait, parce que ça semble naturel à tout le monde que = est en haut de l'arbre d'expression. Donc, pour moi, c'est la même chose avec le reste, il y a des ordres naturels. Si par exemple j'écris l'expression suivante :

    2 + 3 * 4 < 10 && 3 >= 3 / 3 - 4 || 5 % 3 == 3
    
    

    Tout le monde va la parenthéser de la même manière, à savoir :

    (((2 + (3 * 4)) < 10) && ((3 >= (3 / 3) - 4) || ((5 % 3) == 3)))
    
    

    Et honnêtement, je préfère la première version à celle-ci. Surtout quand dans le même temps, certains font l'apologie de l'absence de parenthèses après le if.

    Le seul problème de précédence en C (connu depuis très longtemps) est la précédence de & et |, qui était utilisé pour && et || avant que ces derniers n'apparaissent dans le langage, et qui du coup, ont gardé leur précédence. Ce qui pose problème de nos jours parce qu'on aimerait écrire :

    a & mask == b
    
    

    Mais on ne peut pas, on est obligé de parenthéser l'expression à gauche du ==. Cette erreur n'a jamais été corrigée dans les langages qui descendent du C, comme Java ou PHP.