Estou um pouco confuso com a documentação MSDN C #, que afirma que &
e |
são operadores lógicos e que &&
e ||
são operadores condicionais.
Eu continuo ligando &&
, ||
e !
operadores lógicos, então estou errado?
c#
operators
logical-operator
João V
fonte
fonte
|
seja intercambiável||
, mesmo que em muitos casos eles possam ser trocados sem nenhuma mudança aparente no comportamento do programa.Respostas:
Não; você está certo.
Existem inúmeros erros de nomenclatura pequenos, principalmente sem importância, na documentação do MSDN; Tentei divulgar o maior número possível deles, mas nos casos em que não é flagrantemente errado e enganoso, nem sempre é um uso sábio do tempo. Vá para a especificação se desejar uma declaração definitiva sobre o nome de um recurso C #.
Portanto: a autoridade relevante é a especificação C #, que afirma na seção 7.11:
Em seguida, ele divide ainda mais os operadores lógicos internos em operadores lógicos inteiro, enumeração, booleano e booleano anulável. Também existem operadores lógicos definidos pelo usuário; veja a especificação para detalhes.
Na seção 7.12, temos
Então, todos eles são operadores lógicos . Alguns deles são operadores lógicos condicionais .
O que torna os operadores lógicos condicionais condicionais ? Pode-se fazer um palpite ilusório de que isso ocorre porque eles geralmente são usados em declarações condicionais (
if
) ou expressões condicionais (? :
). A verdadeira razão é dada pela especificação:Os operadores lógicos condicionais são assim nomeados porque o operando do lado direito é avaliado condicionalmente, dependendo do valor do operando do lado esquerdo.
Podemos ver isso mais claramente 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 escreverx ? y : false
ex || y
é simplesmente uma maneira mais agradável de escreverx ? true : y
. As expressões lógicas condicionais são realmente expressões condicionais.Há também uma forma definida pelo usuário do operador lógico condicional, e é um pouco complicado. Veja a especificação para detalhes.
Leitura adicional, se este assunto lhe interessar:
fonte
Em C #, todos esses são operadores lógicos.
&&
e||
são chamados de " operadores lógicos condicionais " porque estão em curto-circuito.Observe que essa terminologia difere de idioma para idioma. Em C e C ++
&&
e||
são apenas operadores lógicos. Em Java,&
e|
são chamados de Operadores bit a bit , enquanto C e C ++ classifica-los como operadores aritméticos .fonte
O ponto é que
&
e|
são operadores bit a bit , o que significa que eles são aplicados e produzem valores de cadeia de bits. E bit a bit é um termo muito usado entre programadores.Por exemplo
0xff & 0x00 == 0x00
, enquanto0xff | 0x00 == 0xff
.E
&&
e||
são aplicados a condições, e deu os valores habituais de condições; ietrue
efalse
.Por exemplo
true && false == false
, enquantotrue || false == true
.Por isso
&&
e||
poderia ser chamado condicionais operadores, apesar de que não é um termo usual entre os programadores.Obviamente, todo programador de C, C ++, Java e C # sabe tudo isso. Mas acho que o mal-entendido acontece porque "operador condicional" não é um termo usado com freqüência por nós programadores.
fonte