43 votes

Tous les langages de programmation ont-ils une évaluation booléenne des courts-circuits?

Dans le code PHP

 if(a() && b())
 

lorsque le premier opérande est évalué à false , b() ne sera pas évalué.

De même, dans

 if (a() || b())
 

lorsque le premier opérande est évalué à true , b() ne sera pas évalué.

Est-ce vrai pour toutes les langues, comme Java, C #, etc.?

C'est le code de test que nous avons utilisé.

 <?php
function a(){
echo 'a';
return false;
}

function b(){
echo 'b';
return true;
}


if(a() && b()){
echo 'c';
}
?>
 

71voto

Patrick McDonald Points 20645

Ceci est appelé évaluation de court-circuit.

Il est généralement vrai pour les langues dérivées de C (C, C++, Java, C#), mais pas vrai pour toutes les langues.

Par exemple, VB6 ne le fait pas, il n'a pas été fait dans les premières versions de VB.NET. VB8 (Visual studio 2005) introduit la AndAlso et OrElse opérateurs à cette fin.

Aussi, d'après les commentaires, il semble que les csh effectue de court-circuit de l'évaluation de la droite vers la gauche, pour rendre les choses encore plus confuses.

Il convient également de souligner que l'évaluation de court-circuit (ou manque de) a ses dangers d'être conscient de. Par exemple, si le deuxième opérande est une fonction qui a des effets secondaires, alors le code ne peut pas effectuer exactement comme le programmeur a prévu.

20voto

Alex Warren Points 736

Ce n'est pas vrai pour VB6.

Dans VB.net, vous devez utiliser "AndAlso" au lieu de "And" si vous voulez ignorer l'évaluation de la deuxième expression.

13voto

Marc Gravell Points 482669

Est-ce vrai pour TOUTES les langues, comme JAVA, C #, etc.?

En C #, cela n'est vrai que pour les opérateurs de court-circuitage ' || ' et ' && '; si vous n'utilisez que ' | ' ou ' & ', il évaluera les deux côtés à chaque fois.

12voto

waxwing Points 10190

C'est ce qu'on appelle l' évaluation de court-circuit et la plupart des langues le font. Dans certaines langues, il existe des opérateurs qui ne le font pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X