Je dirais que 99 fois sur 100, je préfère la version de court-circuiter les opérateurs pour la performance.
Mais il y a deux grandes raisons pour lesquelles j'ai trouvé où je ne les utilise pas.
(En passant, mes exemples sont en C où: & & et || sont de court-circuit et & et | ne sont pas.)
1.) Lorsque vous souhaitez appeler deux ou plusieurs fonctions dans une instruction if, indépendamment de la valeur retournée par la première.
if (isABC() || isXYZ()) // short-circuiting logical operator
//do stuff;
Dans ce cas isXYZ() est appelée uniquement si isABC() renvoie la valeur false. Mais vous pouvez isXYZ() est appelé à n'importe quoi.
Ainsi, au lieu de vous faire ceci:
if (isABC() | isXYZ()) // non-short-circuiting bitwise operator
//do stuff;
2.) Lorsque vous effectuez boolean mathématiques avec des entiers.
myNumber = i && 8; // short-circuiting logical operator
n'est pas nécessairement la même chose que:
myNumber = i & 8; // non-short-circuiting bitwise operator
Dans cette situation, vous pouvez réellement obtenir des résultats différents en raison du court-circuit de l'opérateur ne sont pas nécessairement évaluer l'expression entière. Et qui le rend pratiquement inutile pour booléenne mathématiques. Donc dans ce cas je serais d'utiliser la non-court-circuit (bit à bit) des opérateurs de la place.
Comme je le laissait présager, ces deux scénarios sont vraiment rare pour moi. Mais vous pouvez le voir il y a de réelles programmation raisons pour les deux types d'opérateurs. Et heureusement, la plupart des langues populaires d'aujourd'hui ont les deux. Même VB.NET a la AndAlso et OrElse de court-circuiter les opérateurs. Si une langue aujourd'hui ne pas avoir les deux, je dirais que c'est derrière la fois et vraiment les limites de la programmeur.