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 '+++':

javascriptlet 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:

javascriptlet 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ý:

javascriptlet 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:

javascriptlet 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:

javascriptlet 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:

javascriptlet 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:

javascriptlet 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 '---':

javascriptlet 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('---');
}
Задание 1

Dané pole:

javascriptlet arr = ['a', 'b', 'c', 'd', 'e'];

Skontrolujte, či v tomto poli je prvok 'c'. Ak áno - vypíšte '+++', a ak nie - vypíšte '---'.

Задание 2

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.