I am a bit confused by the MSDN C# documentation which states that &,| are logical operators and && and || are conditional operators. I keep calling &&, ||, ! logical operators, so I am wrong?
Não; você está correto.
Existem inúmeros pequenos erros de nomenclatura, principalmente sem importância, na documentação do MSDN; Tentei tirar o maior número possível deles, mas, nos casos em que isso não é notoriamente errado e enganoso, nem sempre é um uso inteligente do tempo. Vá para a especificação se você quiser uma declaração definitiva sobre o nome de um recurso C #.
Então: a autoridade relevante é a especificação C #, que afirma na seção 7.11:
The &, ^, and | operators are called the logical operators.
Em seguida, ele continua a dividir ainda mais os operadores lógicos internos em operadores lógicos integer, enumeration, Boolean e nullable-Boolean. Existem também operadores lógicos definidos pelo usuário; veja a especificação para detalhes.
Na seção 7.12 nós temos
The && and || operators are called the conditional logical operators. They are also called the “short-circuiting” logical operators.
Então, todos eles são operadores lógicos . Alguns deles são operadores lógicos condicionais .
O que torna os condutores lógicos condicionais condicionais ? Alguém pode adivinhar que é porque eles são tipicamente usados em declarações condicionais ( if
) ou expressões condicionais ( ? :
). A verdadeira razão é dada pela especificação:
The && and || operators are conditional versions of the & and | operators: The operation x && y corresponds to the operation x & y, except that y is evaluated only if x is not false. The operation x || y corresponds to the operation x | y, except that y is evaluated only if x is not true.
Os operadores lógicos condicionais são assim nomeados porque o operando da mão direita é avaliado condicionalmente dependendo do valor do operando da esquerda.
Podemos ver isso de forma mais vívida, observando que os operadores lógicos condicionais são apenas "açúcares sintáticos" para expressões condicionais . x && y
é simplesmente uma maneira mais agradável de escrever x ? y : false
e x || y
é simplesmente uma maneira mais agradável de escrever x ? true : y
. As expressões lógicas condicionais são, na verdade, expressões condicionais.
Existe também uma forma definida pelo usuário do operador lógico condicional, e é um pouco complicado. Veja a especificação para detalhes.
Mais leituras, se este assunto lhe interessar: