Trabalhando com flags em JavaScript

Agora vamos aprender a trabalhar com flags. Uma flag é uma variável especial que só pode assumir dois valores: true e false. Com as flags, podemos resolver problemas que verificam a ausência de algo: por exemplo, podemos verificar se não há um elemento com um valor específico em um array. Vamos começar.

Vamos resolver o seguinte problema: dado um array com números, verifique se há nele um elemento com o valor 3 ou não. Se houver - exiba '+++', se não - exiba '---'.

Para começar, vamos tentar exibir '+++'. Para isso, vamos percorrer todos os elementos do nosso array e com um 'if' vamos perguntar - o elemento atual é igual ao valor 3? Se for igual - exibimos '+++':

javascriptlet arr = [1, 2, 3, 4, 5];

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++');
  }
}

Mas nossa solução não é muito boa: pois se no array houver não um único valor 3, mas vários, então '+++' será exibido várias vezes. Vamos corrigir nosso array (fazer dois elementos com o valor 3) e verificar isso:

javascriptlet arr = [1, 2, 3, 4, 3, 5];

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++'); // exibirá várias vezes
  }
}

Vamos corrigir o problema: encerremos o ciclo com break, se o elemento já for encontrado:

javascriptlet arr = [1, 2, 3, 4, 3, 5];

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++');
    break;  // encerramos o ciclo
  }
}

Agora vamos tentar fazer com que, se não houver nenhum elemento com o valor 3 no array, seja exibido '---'. Um equívoco comum é adicionar else ao nosso 'if' - neste caso, '---' será exibido para todos os elementos que não são 3:

javascriptlet arr = [1, 2, 3, 4, 5];

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++'); // exibirá no elemento 3
  } else {
    console.log('---'); // exibirá nos elementos 1, 2, 4, 5
  }
}

Então, a ideia de adicionar else é uma ideia ruim, que não funciona. Para resolver problemas desse tipo (tais problemas são encontrados com bastante frequência) são usadas as chamadas flags.

Como mencionado acima, uma flag é uma variável que pode assumir dois valores: true ou false.

Então, vamos criar uma variável flag com o seguinte significado: se for igual a true, então há um elemento 3 no array, e se for false, então não há tal elemento.

Inicialmente, vamos definir a variável flag como false - ou seja, vamos assumir que o elemento 3 não está no array:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false; // assumimos que o elemento 3 não está no array

Em seguida, vamos executar o ciclo com um 'if' da mesma forma que fizemos anteriormente. Se o ciclo detectar que há um elemento 3 no array, então definiremos a variável flag como true e sairemos do ciclo com break:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false; // assumimos que o elemento 3 não está no array

for (let elem of arr) {
  if (elem == 3) {
    flag = true; // elemento existe - redefinimos a variável flag
    break; // saímos do ciclo
  }
}

A resposta para a questão, se há 3 no array ou não, só podemos dar após o ciclo. E essa resposta nós já temos: após o ciclo, a variável flag pode ter permanecido false ou pode ter mudado seu valor para true, se o ciclo detectou 3 no array:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false;

for (let elem of arr) {
  if (elem == 3) {
    flag = true;
    break;
  }
}

// aqui a variável flag é igual a true ou false

Agora, após o ciclo, podemos fazer um 'if' que verificará a variável flag e exibirá na tela '+++' ou '---':

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false;

for (let elem of arr) {
  if (elem == 3) {
    flag = true;
    break;
  }
}

if (flag === true) {
  console.log('+++');
} else {
  console.log('---');
}
Задание 1

Dado o array:

javascriptlet arr = ['a', 'b', 'c', 'd', 'e'];

Verifique se neste array há o elemento 'c'. Se houver - exiba '+++', e se não - exiba '---'.

Задание 2

Escreva um código que irá verificar se um número é primo ou não. Um número primo é divisível apenas por um e por si mesmo, e não é divisível por outros números.