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
'+++':
let 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:
let 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:
let 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:
let 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:
let 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:
let 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:
let 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 '---':
let 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('---');
}
Dado o array:
let arr = ['a', 'b', 'c', 'd', 'e'];
Verifique se neste array há o elemento
'c'. Se houver - exiba '+++',
e se não - exiba '---'.
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.