Como comparar dois blocos de if e if

O comando if checa uma condição e executas o comando a seguir ou um bloco de comandos delimitados por chaves, se a condição é verdadeira ('true').

if (condição) { //comando(s) }

condição: uma expressão booleana, isto é, que pode resultar apenas em true ou false

As chaves podem ser omitidas depois de um comando if. Se isso é feito, a próxima linha (definida pelo ponto e vírgula) é interpretada como o único comando condicional. Para mais de um comando, use as chaves para delimitar o bloco de comandos.

if (x > 120) { digitalWrite(pinoLED, HIGH); } if (x > 120) { digitalWrite(pinoLED, HIGH); } if (x > 120) { digitalWrite(pinoLED, HIGH); } if (x > 120) { digitalWrite(pinoLED1, HIGH); digitalWrite(pinoLED2, HIGH); } // todas as formas acima estão corretas

As expressões sendo testadas dentro dos parênteses geralmente requerem o uso de um ou mais dos operadores mostrados abaixo.

Operadores de comparação:

x == y (x é igual a y) x != y (x é diferente de y) x < y (x é menor que y) x > y (x maior que y) x <= y (x é menor ou igual a y) x >= y (x é maior ou igual a y)

Cuidado para não usar acidentalmente o símbolo de igual simples (ex. if (x = 10) ). O símbolo de igual simples é o operador de atribuição, se atribui 10 a x (coloca o valor 10 na variável x). Em vez disso, o símbolo de igual duplo (ex. if (x == 10) ) deve ser usado, que é o operador de comparação, e testa se x é igaul a 10 ou não. O último é apenas verdadeiro se x é igual a 10, enquanto o primeiro comando mostrado sempre resultará em verdadeiro.

Isso acontece porque a linguagem C++ interpreta if (x=10) da seguinte forma: 10 é atribuído a x (Lembre que o símbolo de igual simples é o (operador de atribuição)), então x agora contém 10. então o comando 'if' testa 10, o que sempre resulta true, desde que qualquer número diferente de zero resulta em true. Consequentemente, if (x = 10) irá sempre resultar em true, o que não é desejável ao se usar um comando 'if'. Além disso, a variável x irá receber o valor 10, o que também é indesejado.

Se você quiser testar várias condições sem escrever instruções aninhadas if...else, os operadores lógicos poderão ajudá-lo. Quando usado em condições, os dois primeiros fazem o seguinte:

  • && — AND; permite encadear duas ou mais expressões para que todas elas tenham que ser avaliadas individualmente como true assim toda a expressão retorna true.
  • || — OR; permite encadear duas ou mais expressões para que uma ou mais delas tenham que ser avaliadas individualmente como true assim toda a expressão retorna true.

Para fornecer um exemplo AND, o fragmento de exemplo anterior pode ser reescrito assim:

if (choice === 'sunny' && temperature < 86) { para.textContent = 'It is ' + temperature + ' degrees outside — nice and sunny. Let\'s go out to the beach, or the park, and get an ice cream.'; } else if (choice === 'sunny' && temperature >= 86) { para.textContent = 'It is ' + temperature + ' degrees outside — REALLY HOT! If you want to go outside, make sure to put some suncream on.'; }

Então, por exemplo, o primeiro bloco de código só será executado se ambas as condições choice === 'sunny' e temperature < 86 retornarem true.

Vamos ver um exemplo rápido de OR:

if (iceCreamVanOutside || houseStatus === 'on fire') { console.log('You should leave the house quickly.'); } else { console.log('Probably should just stay in then.'); }

O último tipo de operador lógico, NOT, expressado pelo operador !, pode ser usado para negar uma expressão. Vamos combiná-lo com OR no exemplo acima:

if (!(iceCreamVanOutside || houseStatus === 'on fire')) { console.log('Probably should just stay in then.'); } else { console.log('You should leave the house quickly.'); }

Nesse trecho, se a instrução OR retornar true, o operador NOT negará isso para que a expressão geral retorne false.

Você pode combinar tantas instruções lógicas quanto quiser, em qualquer estrutura. O exemplo a seguir executa o código interno apenas se ambos os conjuntos de instruções OR retornarem true, significando que a instrução AND global também retornará true:

if ((x === 5 || y > 3 || z <= 10) && (loggedIn || userName === 'Steve')) { }

Um erro comum ao usar o operador OR lógico em instruções condicionais é tentar indicar a variável cujo valor você está verificando uma vez e, em seguida, fornecer uma lista de valores que poderia ser para retornar true, separados pelos operadores || (OR) . Por exemplo:

if (x === 5 || 7 || 10 || 20) { }

Nesse caso, a condição dentro de if(...)  sempre será avaliada como verdadeira, já que 7 (ou qualquer outro valor diferente de zero) sempre é avaliado como verdadeiro. Esta condição está realmente dizendo "se x é igual a 5, ou 7 é verdade — o que sempre é". Isso logicamente não é o que queremos! Para fazer isso funcionar, você precisa especificar um teste completo ao lado de cada operador OR:

if (x === 5 || x === 7 || x === 10 ||x === 20) { }