Tout comme l' opérateur &
et &&
, l'opérateur double est un opérateur de "court-circuit".
Par exemple:
if(condition1 || condition2 || condition3)
Si la condition 1 est vraie, les conditions 2 et 3 ne seront PAS vérifiées.
if(condition1 | condition2 | condition3)
Cela vérifiera les conditions 2 et 3, même si 1 est déjà vrai. Comme vos conditions peuvent être des fonctions assez coûteuses, vous pouvez obtenir une bonne amélioration des performances en les utilisant.
Il y a une grosse mise en garde, NullReferences ou des problèmes similaires. Par exemple:
if(class != null && class.someVar < 20)
Si la classe est null, l'instruction if s'arrêtera après class != null
est false. Si vous utilisez uniquement &, il essaiera de vérifier class.someVar
et vous obtiendrez une belle NullReferenceException
. Avec l'Or-Opérateur, ce n'est peut-être pas vraiment un piège car il est peu probable que vous déclenchiez quelque chose de mauvais, mais c'est quelque chose à garder à l'esprit.
Personne n'utilise jamais le single &
ou les |
opérateurs, sauf si vous avez une conception où chaque condition est une fonction qui DOIT être exécutée. Cela ressemble à une odeur de design, mais parfois (rarement) c'est une façon propre de faire des choses. L' &
opérateur "exécute ces 3 fonctions, et si l'une d'elles retourne false, exécute le bloc else", tandis |
que "n'exécute le bloc else que si aucune ne retourne false" - peut être utile, mais comme dit, souvent c'est une conception odeur.
Il y a une deuxième utilisation des |
et &
opérateur cependant: au niveau du bit opérations .