Tout comme l'opérateur &
et &&
, l'opérateur double est un opérateur "court-circuit".
Par exemple:
if(condition1 || condition2 || condition3)
Si la condition1 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 la 1 est déjà vraie. 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 un gros hic, les références nulles ou des problèmes similaires. Par exemple:
if(classe != null && classe.someVar < 20)
Si classe est null, l'instruction if s'arrêtera après que classe != null
est faux. Si vous utilisez seulement &, il essaiera de vérifier classe.someVar
et vous obtiendrez une jolie NullReferenceException
. Avec l'opérateur Ou, cela ne sera peut-être pas autant 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 les opérateurs simples &
ou |
, sauf si vous avez une conception où chaque condition est une fonction qui DOIT être exécutée. Cela semble être un problème de conception, mais parfois (rarement), c'est une façon propre de faire les choses. L'opérateur &
exécute "ces 3 fonctions, et si l'une d'elles renvoie false, exécute le bloc else", tandis que le |
fait "exécuter le bloc else uniquement si aucune ne renvoie false" - peut être utile, mais comme mentionné, c'est souvent un problème de conception.
Il y a cependant une deuxième utilisation de l'opérateur |
et &
: Opérations logiques.