Práce s příznaky v JavaScriptu
Nyní se naučíme pracovat s příznaky.
Příznak je speciální proměnná, která
může nabývat pouze dvou hodnot: true
a false. Pomocí příznaků lze řešit
úkoly, které ověřují nepřítomnost něčeho:
lze například zkontrolovat, že v poli
není prvek s určitou hodnotou. Pojďme
začít.
Pojďme vyřešit následující úkol: je dáno pole
s čísly, je třeba zkontrolovat, zda v něm
je prvek s hodnotou 3 nebo ne. Pokud
ano - vypište '+++', pokud ne -
vypište '---'.
Pro začátek zkusme vypsat '+++'.
K tomu projdeme všechny prvky našeho pole
a pomocí if se budeme ptát - je aktuální
prvek roven hodnotě 3. Pokud je roven - vypíšeme
'+++':
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
Ale naše řešení není příliš dobré: pokud
v poli bude ne jedna hodnota 3,
ale několik, pak se '+++' vypíše několikrát
Pojďme upravit naše pole (udělejme
dva prvky s hodnotou 3) a přesvědčme se o tom:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // vypíše několikrát
}
}
Pojďme problém opravit: ukončíme cyklus pomocí
break, pokud byl prvek již nalezen:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // ukončíme cyklus
}
}
Nyní zkusme udělat to, aby,
pokud v poli vůbec nejsou prvky s hodnotou
3, vypisovalo se '---'. Častým
omylem je přidat else k
našemu ifu - v tomto případě se '---' bude
vypisovat pro všechny prvky, které nejsou
3:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // vypíše na prvku 3
} else {
console.log('---'); // vypíše na prvcích 1, 2, 4, 5
}
}
Takže, nápad přidat else - je špatný
nápad, nefunkční. Pro řešení úkolů tohoto
druhu (takové úkoly se vyskytují dostatečně
často) se používají takzvané příznaky.
Jak již bylo zmíněno výše, příznak je taková
proměnná, která může nabývat dvou hodnot:
true nebo false.
Takže, udělejme proměnnou flag
s tímto významem: pokud je rovna true,
pak v poli je prvek 3, a pokud
false, pak takový prvek není.
Nejprve nastavme proměnnou flag
na hodnotu false - to znamená, že budeme předpokládat,
že prvek 3 v poli není:
let arr = [1, 2, 3, 4, 5];
let flag = false; // předpokládáme, že prvek 3 v poli není
Poté spustíme cyklus s ifem tak, jak jsme to dělali
dříve. Pokud cyklus zjistí, že v poli
je prvek 3 - pak nastavíme proměnnou flag
na hodnotu true a ukončíme cyklus
pomocí break:
let arr = [1, 2, 3, 4, 5];
let flag = false; // předpokládáme, že prvek 3 v poli není
for (let elem of arr) {
if (elem == 3) {
flag = true; // prvek existuje - přenastavíme proměnnou flag
break; // ukončíme cyklus
}
}
Odpověď na otázku, zda je v poli 3
nebo ne, můžeme dát až po cyklu.
A tuto odpověď již máme: po cyklu
proměnná flag mohla zůstat false
nebo mohla změnit svou hodnotu na true,
pokud cyklus objevil v poli 3:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// zde je proměnná flag rovna buď true, nebo false
Nyní po cyklu můžeme udělat if, který
se podívá na proměnnou flag a vypíše
na obrazovku '+++' nebo '---':
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('---');
}
Je dáno pole:
let arr = ['a', 'b', 'c', 'd', 'e'];
Zkontrolujte, zda v tomto poli je prvek
'c'. Pokud ano - vypište '+++',
a pokud ne - vypište '---'.
Napište kód, který bude kontrolovat, zda je číslo prvočíslo nebo ne. Prvočíslo je dělitelné pouze jedničkou a samo sebou, a není dělitelné jinými čísly.