Bonjour,
Une petite question existentielle... Voyez-vous un inconvénient à remplacer && par &? Exemple :
Merci par avance pour vos réponses!Code:
1
2
3
4
5 a=1; b=2; c=3; if ((c>b)&&(b>a)) alert("Bon!"); if ((c>b)&(b>a)) alert("Bon aussi!");
Version imprimable
Bonjour,
Une petite question existentielle... Voyez-vous un inconvénient à remplacer && par &? Exemple :
Merci par avance pour vos réponses!Code:
1
2
3
4
5 a=1; b=2; c=3; if ((c>b)&&(b>a)) alert("Bon!"); if ((c>b)&(b>a)) alert("Bon aussi!");
Hello,
Le truc c'est que & c'est censé être l'opérateur ET binaire. Ça va donc surprendre le programmeur qui tombe là-dessus dans le code.
Cela dit, c'est vrai qu'en matière de conversion, true se convertit à 1 et vice-versa, et false à zéro et vice-versa. Du coup, en principe, le résultat obtenu sera le même.
Mais il y a aussi le fait que && utilise un court-circuit :
appellera d'abord condition1(), et si c'est false le if et condition2() ne s'exécutent pas. Si c'est true alors condition2() s'exécute, et son résultat n'est converti en booléen que pour les besoins de if :Code:if(condition1() && condition2())
v sera égal à "chat", qui n'est pas converti en booléen ni en quoi que ce soit.Code:var v = true && "chat";
Alors qu'en utilisant a() & b(), a() et b() sont exécutés tous les deux, pas de court-circuit. Et ils sont tous les deux convertis en nombres, et le résultat obtenu est le ET binaire appliqué sur ces nombres.
Bonjour,
pas grand chose de plus à dire sur ce qui vient d'être écrit il est évident qu'il faut se cantonner à :
- utiliser && pour une opération logique ;
- utiliser & pour une opération binaire.
et du coup tout le monde s'y retrouve et n'aura pas à chasser le bug le jour où on remplace les expressions par d'autres non booléennes.
Bonjour,
Pour les inconvénients, je retiens ceci :
- Ca va surprendre le programmeur.
- L'opération logique est plus efficace avec &&.
Merci pour vos réponses.