Genau wie die &
und &&
Betreiber ist der Doppel Operator ein „Kurzschluss“ Operator.
Zum Beispiel:
if(condition1 || condition2 || condition3)
Wenn Bedingung1 erfüllt ist, werden Bedingung 2 und 3 NICHT überprüft.
if(condition1 | condition2 | condition3)
Dadurch werden die Bedingungen 2 und 3 überprüft, auch wenn 1 bereits wahr ist. Da Ihre Bedingungen sehr teure Funktionen sein können, können Sie mit ihnen einen guten Leistungsschub erzielen.
Es gibt eine große Einschränkung, NullReferences oder ähnliche Probleme. Zum Beispiel:
if(class != null && class.someVar < 20)
Wenn class null ist, stoppt die if-Anweisung, nachdem class != null
false festgelegt wurde. Wenn Sie nur & verwenden, wird es versuchen zu überprüfen class.someVar
und Sie erhalten eine schöne NullReferenceException
. Mit dem Or-Operator ist das vielleicht keine so große Falle, da es unwahrscheinlich ist, dass Sie etwas Schlechtes auslösen, aber es ist etwas, das Sie beachten sollten.
Niemand verwendet jedoch jemals die Einzel- &
oder |
Operatoren, es sei denn, Sie haben ein Design, bei dem jede Bedingung eine Funktion ist, die ausgeführt werden muss. Klingt nach einem Designgeruch, ist aber manchmal (selten) eine saubere Art, Dinge zu tun. Der &
Operator führt "diese 3 Funktionen aus, und wenn eine von ihnen false zurückgibt, führen Sie den else-Block aus", während der Operator "den else-Block |
nur ausführt, wenn keiner false zurückgibt " - nützlich sein kann, aber wie gesagt, oft handelt es sich um ein Design Geruch.
Es gibt jedoch eine zweite Verwendung des Operators |
und &
: Bitweise Operationen .