Trabajo con banderas en JavaScript
Ahora aprenderemos a trabajar con banderas.
Una bandera es una variable especial que
solo puede tomar dos valores: true
y false. Con la ayuda de banderas, puedes resolver
tareas que verifican la ausencia de algo:
por ejemplo, puedes verificar que en un array
no hay un elemento con un valor específico. Vamos
a empezar.
Resolvamos la siguiente tarea: dado un array
con números, necesitamos verificar si hay en él
un elemento con el valor 3 o no. Si
lo hay - mostraremos '+++', si no -
mostraremos '---'.
Para empezar, intentemos mostrar '+++'.
Para ello, recorreremos todos los elementos de nuestro array
y con un if preguntaremos - ¿es igual el elemento
actual al valor 3? Si es igual - mostraremos
'+++':
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
Pero nuestra solución no es muy buena: porque si
en el array hay no un solo valor 3,
sino varios, entonces '+++' se mostrará varias
veces. Cambiemos nuestro array (hagamos
dos elementos con el valor 3) y convenzámonos de ello:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // se mostrará varias veces
}
}
Arreglemos el problema: terminemos el ciclo con la ayuda de
break, si el elemento ya fue encontrado:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // terminamos el ciclo
}
}
Ahora intentemos hacer que,
si en el array no hay en absoluto elementos con el valor
3, se muestre '---'. Un error común
sería agregar else a
nuestro if - en este caso '---' se
mostrará para todos los elementos que no sean
3:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // se mostrará en el elemento 3
} else {
console.log('---'); // se mostrará en los elementos 1, 2, 4, 5
}
}
Entonces, la idea de agregar else - es una mala
idea, no funciona. Para resolver tareas de este
tipo (estas tareas se encuentran con bastante
frecuencia) se usan las llamadas banderas.
Como se mencionó anteriormente, una bandera es una
variable de este tipo, que puede tomar dos valores:
true o false.
Entonces, hagamos una variable flag
con este significado: si es igual a true,
entonces en el array hay un elemento 3, y si
es false, entonces no hay tal elemento.
Inicialmente, pongamos la variable flag
en el valor false - es decir, consideraremos
que el elemento 3 no está en el array:
let arr = [1, 2, 3, 4, 5];
let flag = false; // consideramos que el elemento 3 no está en el array
Luego, ejecutemos un ciclo con un if tal como lo hicimos
antes. Si el ciclo detecta que en el array
hay un elemento 3 - entonces pondremos la variable flag
en el valor true y saldremos del ciclo
con la ayuda de break:
let arr = [1, 2, 3, 4, 5];
let flag = false; // consideramos que el elemento 3 no está en el array
for (let elem of arr) {
if (elem == 3) {
flag = true; // el elemento existe - redefinimos la variable flag
break; // salimos del ciclo
}
}
La respuesta a la pregunta, si hay 3 en el array
o no, la podemos dar solo después del ciclo.
Y esta respuesta ya la tenemos: después del ciclo
la variable flag pudo permanecer en false
o pudo cambiar su valor a true,
si el ciclo detectó un 3 en el array:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// aquí la variable flag es igual a true o false
Ahora, después del ciclo, podemos hacer un if, que
mire la variable flag y muestre
en pantalla '+++' o '---':
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 un array:
let arr = ['a', 'b', 'c', 'd', 'e'];
Verifique que en este array hay un elemento
'c'. Si lo hay - muestre '+++',
y si no - muestre '---'.
Escriba un código que verifique si un número es primo o no. Un número primo es divisible solo por uno y por sí mismo, y no es divisible por otros números.