Você está na página 1de 3

Qual a diferena de usar && ou & em um if?

||
ou |? Como fazer um if ternrio?

Estamos acostumados escrever ifs dessa forma:

if (condicao && outraCondicao)


{
//faz algo
}

if (condicao || outraCondicao)
{
//faz algo
}

Mas, d pra trocar os && e || por & e | :

if (condicao & outraCondicao)


{
//faz algo
}

if (condicao | outraCondicao)
{
//faz algo
}

Mas qual a diferena?

Operadores de curto circuito


Vamos olhar esse cdigo:

int a = 1;
int b = 2;
if (a < 0 && b > 0)
{
//faz algo
}

S entraremos nesse if se a for menor que 0 e b for maior que 0. Ou seja, as duas expresses tem
que retornar true.
Nesse exemplo besta que eu fiz, a primeira parte retorna false, certo? Isso significa que no
importa o que a segunda parte retornar, no tem como entrar no if.

Sendo assim, a segunda parte no ser avaliada. Falamos que d um "curto circuito" depois que
a primeira condio avaliada.

Agora, se usssemos o || :

int a = 1;
int b = 2;
if (a < 0 || b > 0)
{
//faz algo
}

Nesse caso entraremos no if se a primeira condio retornar true ou se a segunda retornar true.

Ou seja, se a primeira j retornar true, nem precisamos avaliar o resto, certo?


E exatamente isso que acontece, a segunda parte ignorada (:

Quando usamos os operadores & e | , as duas condies sempre so avaliadas.


Difcil ter que fazer isso n?

Eu, pelo menos, nunca precisei.


E voc?

if ternrio
Vamos pegar o seguinte cdigo de exemplo:

int a = 1;
int b = 2;

if (a > 0 && b > 0)


{
int c = 1;
}
else
{
int c = 100;
}

(no leve em considerao que esse cdigo intil, s um exemplo)

Esse um if relativamente simples, certo?


Podemos quebrar ele em uma linha usando um if ternrio.

Ficaria assim:
int a = 1;
int b = 2;
int c = a > 0 && b > 0 ? 1 : 100;

Essa linha significa:


Crie uma varivel do tipo int chamada c. Se a for maior que zero e b tambm(?), atribua 1 pra
ela. Seno(:), atribua 100.

Legal, n? D pra simplificar vrios ifs dessa forma (:

Você também pode gostar