Lavorare con i flag in JavaScript
Ora impareremo a lavorare con i flag.
Un flag è una variabile speciale che
può assumere solo due valori: true
e false. Con l'aiuto dei flag è possibile risolvere
problemi che verificano l'assenza di qualcosa:
ad esempio, si può verificare che in un array
non ci sia un elemento con un valore specifico. Iniziamo.
Risolviamo il seguente problema: dato un array
di numeri, dobbiamo verificare se contiene
un elemento con valore 3 o meno. Se
presente, stampiamo '+++', se
assente - stampiamo '---'.
Per iniziare, proviamo a stampare '+++'.
Per farlo, iteriamo attraverso tutti gli elementi del nostro array
e con un if chiederemo - l'elemento corrente
è uguale al valore 3? Se è uguale, stampiamo
'+++':
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
Ma la nostra soluzione non è ottimale: se
nell'array non ci fosse un solo valore 3,
ma diversi, allora '+++' verrebbe stampato diverse
volte. Modifichiamo il nostro array (mettiamo
due elementi con valore 3) e verifichiamolo:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // stamperà più volte
}
}
Risolviamo il problema: interrompiamo il ciclo con
break, se l'elemento è già stato trovato:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // interrompiamo il ciclo
}
}
Ora proviamo a fare in modo che,
se nell'array non ci sono affatto elementi con valore
3, venga stampato '---'. Un errore comune
sarebbe aggiungere else
al nostro if - in questo caso '---' verrebbe
stampato per tutti gli elementi che non sono
3:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // stamperà per l'elemento 3
} else {
console.log('---'); // stamperà per gli elementi 1, 2, 4, 5
}
}
Quindi, l'idea di aggiungere else è una
cattiva idea, non funziona. Per risolvere problemi di questo
tipo (problemi abbastanza frequenti)
si utilizzano i cosiddetti flag.
Come accennato in precedenza, un flag è una
variabile che può assumere due valori:
true o false.
Quindi, creiamo una variabile flag
con questo significato: se è uguale a true,
allora l'array contiene l'elemento 3, mentre se
è false, allora tale elemento non è presente.
Inizialmente impostiamo la variabile flag
a false - cioè assumeremo
che l'elemento 3 non sia presente nell'array:
let arr = [1, 2, 3, 4, 5];
let flag = false; // assumiamo che l'elemento 3 non sia nell'array
Poi eseguiamo un ciclo con un if come facevamo
prima. Se il ciclo rileva che nell'array
c'è un elemento 3 - allora imposteremo la variabile flag
a true e usciremo dal ciclo
con break:
let arr = [1, 2, 3, 4, 5];
let flag = false; // assumiamo che l'elemento 3 non sia nell'array
for (let elem of arr) {
if (elem == 3) {
flag = true; // l'elemento c'è - ridefiniamo la variabile flag
break; // usciamo dal ciclo
}
}
La risposta alla domanda se nell'array c'è 3
o meno, possiamo darla solo dopo il ciclo.
E questa risposta la abbiamo già: dopo il ciclo
la variabile flag potrebbe essere rimasta false
o potrebbe aver cambiato il suo valore in true,
se il ciclo ha rilevato 3 nell'array:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// qui la variabile flag è uguale a true o false
Ora, dopo il ciclo, possiamo fare un if che
controllerà la variabile flag e stamperà
a schermo '+++' 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('---');
}
Dato un array:
let arr = ['a', 'b', 'c', 'd', 'e'];
Verifica se in questo array c'è un elemento
'c'. Se c'è - stampa '+++',
se non c'è - stampa '---'.
Scrivi del codice che verifichi se un numero è primo o meno. Un numero primo è divisibile solo per uno e per se stesso, e non è divisibile per altri numeri.