Práca s flagmi v JavaScript
Teraz sa naučíme pracovať s flagmi.
Flag je špeciálna premenná, ktorá
môže nadobúdať iba dve hodnoty: true
a false. Pomocou flagov môžeme riešiť
úlohy, ktoré overujú neprítomnosť niečoho:
napríklad môžeme skontrolovať, či v poli
nie je prvok s určitou hodnotou. Poďme na to.
Poďme vyriešiť nasledujúcu úlohu: dané pole
s číslami, treba skontrolovať, či sa v ňom
nachádza prvok s hodnotou 3 alebo nie. Ak
áno - vypíšeme '+++', ak nie -
vypíšeme '---'.
Na začiatok skúsme vypísať '+++'.
Na to prejdeme všetky prvky nášho poľa
a pomocou if sa budeme pýtať - je aktuálny
prvok rovný hodnote 3? Ak áno - vypíšeme
'+++':
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
Naše riešenie však nie je veľmi dobré: pretože ak
v poli bude nie jedna hodnota 3,
ale niekoľko, tak sa '+++' vypíše niekoľkokrát.
Upravme naše pole (urobme
dva prvky s hodnotou 3) a presvedčíme sa o tom:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // vypíše sa niekoľkokrát
}
}
Opravme problém: ukončíme cyklus pomocou
break, ak bol prvok už nájdený:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // ukončíme cyklus
}
}
Skúsme teraz urobiť to, aby,
ak v poli nie sú vôbec žiadne prvky s hodnotou
3, vypísalo sa '---'. Bežným
omylom je pridať else k
nášmu ifu - v takom prípade sa '---'
vypíše pre všetky prvky, ktoré nie sú
3:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // vypíše sa na prvku 3
} else {
console.log('---'); // vypíše sa na prvkoch 1, 2, 4, 5
}
}
Takže, nápad pridať else - je zlý
nápad, nefunguje. Na riešenie úloh tohto
typu (takéto úlohy sa vyskytujú dosť
často) sa používajú takzvané flagy.
Ako už bolo spomenuté vyššie, flag je taká
premenná, ktorá môže nadobúdať dve hodnoty:
true alebo false.
Takže, urobme premennú flag
s touto hodnotou: ak je rovná true,
tak v poli je prvok 3, a ak
false, tak taký prvok nie je.
Spočiatku nastavme premennú flag
na hodnotu false - to znamená, že budeme predpokladať,
že prvok 3 v poli nie je:
let arr = [1, 2, 3, 4, 5];
let flag = false; // predpokladáme, že prvok 3 nie je v poli
Potom spustíme cyklus s ifom tak, ako sme to robili
predtým. Ak cyklus zistí, že v poli
je prvok 3 - tak nastavíme premennú flag
na hodnotu true a ukončíme cyklus
pomocou break:
let arr = [1, 2, 3, 4, 5];
let flag = false; // predpokladáme, že prvok 3 nie je v poli
for (let elem of arr) {
if (elem == 3) {
flag = true; // prvok existuje - predefinujeme premennú flag
break; // ukončíme cyklus
}
}
Odpoveď na otázku, či je v poli 3
alebo nie, môžeme dať až po cykle.
A túto odpoveď už máme: po cykle
premenná flag mohla zostať false
alebo mohla zmeniť svoju hodnotu na true,
ak cyklus zistil v poli 3:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// tu je premenná flag rovná buď true, alebo false
Teraz po cykle môžeme urobiť if, ktorý
sa pozrie na premennú flag a vypíše
na obrazovku '+++' alebo '---':
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('---');
}
Dané pole:
let arr = ['a', 'b', 'c', 'd', 'e'];
Skontrolujte, či v tomto poli je prvok
'c'. Ak áno - vypíšte '+++',
a ak nie - vypíšte '---'.
Napíšte kód, ktorý bude kontrolovať, či je číslo prvočíslo alebo nie. Prvočíslo je deliteľné iba jednotkou a sebou samým, a nie je deliteľné inými číslami.