Lucrul cu flag-uri în JavaScript
Acum vom învăța să lucrăm cu flag-uri.
Un flag este o variabilă specială care
poate lua doar două valori: true
și false. Cu ajutorul flag-urilor se pot rezolva
sarcini care verifică absența a ceva:
de exemplu, se poate verifica dacă într-un array
nu există un element cu o anumită valoare. Să
începem.
Să rezolvăm următoarea sarcină: este dat un array
cu numere, trebuie să verificăm dacă există în el
un element cu valoarea 3 sau nu. Dacă
există - vom afișa '+++', dacă nu -
vom afișa '---'.
Pentru început să încercăm să afișăm '+++'.
Pentru aceasta vom parcurge toate elementele array-ului nostru
și cu un if vom întreba - este egal elementul curent
cu valoarea 3. Dacă este egal - vom afișa
'+++':
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
Dar soluția noastră nu este foarte bună: dacă
în array vor fi nu o singură valoare 3,
ci mai multe, atunci '+++' se va afișa de mai multe
ori. Să corectăm array-ul nostru (să facem
două elemente cu valoarea 3) și să ne convingem de aceasta:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // va afișa de mai multe ori
}
}
Să corectăm problema: vom încheia ciclul cu ajutorul
break, dacă elementul a fost deja găsit:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // încheiem ciclul
}
}
Să încercăm acum să facem astfel încât,
dacă în array nu există deloc elemente cu valoarea
3, să se afișeze '---'. O concepție greșită
frecventă este să adăugăm else la
if-ul nostru - în acest caz '---' se va
afișa pentru toate elementele care nu sunt
3:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // va afișa pe elementul 3
} else {
console.log('---'); // va afișa pe elementele 1, 2, 4, 5
}
}
Așadar, ideea de a adăuga else - este o idee proastă,
nefuncțională. Pentru rezolvarea sarcinilor de acest
tip (astfel de sarcini se întâlnesc destul de
des) se folosesc așa-numitele flag-uri.
Cum am menționat deja mai sus, un flag este o
variabilă care poate lua două valori:
true sau false.
Așadar, să facem variabila flag
cu următoarea semnificație: dacă este egală cu true,
atunci în array există elementul 3, iar dacă
false, atunci un astfel de element nu există.
Inițial vom seta variabila flag
la valoarea false - adică vom considera,
că elementul 3 nu se află în array:
let arr = [1, 2, 3, 4, 5];
let flag = false; // considerăm că elementul 3 nu se află în array
Apoi vom porni ciclul cu if așa cum am făcut
anterior. Dacă ciclul va detecta că în array
există elementul 3 - atunci vom seta variabila flag
la valoarea true și vom ieși din ciclu
cu ajutorul break:
let arr = [1, 2, 3, 4, 5];
let flag = false; // considerăm că elementul 3 nu este în array
for (let elem of arr) {
if (elem == 3) {
flag = true; // elementul există - redefinim variabila flag
break; // ieșim din ciclu
}
}
Răspunsul la întrebarea, dacă în array există 3
sau nu, îl putem da doar după ciclu.
Și acest răspuns îl avem deja: după ciclu
variabila flag poate să fi rămas false
sau poate să-și fi schimbat valoarea în true,
dacă ciclul a detectat în array 3:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// aici variabila flag este fie true, fie false
Acum după ciclu putem face un if, care
va privi variabila flag și va afișa
pe ecran '+++' sau '---':
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('---');
}
Este dat un array:
let arr = ['a', 'b', 'c', 'd', 'e'];
Verificați dacă în acest array există elementul
'c'. Dacă există - afișați '+++',
iar dacă nu - afișați '---'.
Scrieți un cod care va verifica un număr dacă este prim sau nu. Un număr prim se împarte doar la unu și la el însuși, și nu se împarte la alte numere.