Рад са флаговима у JavaScript-у
Сада ћемо научити да радимо са флаговима.
Флаг је посебна променљива која
може имати само две вредности: true
и false. Помоћу флагова могу се решавати
задаци који проверавају одсуство нечега:
на пример, може се проверити да ли у низу
нема елемента са одређеном вредношћу. Хајде
да почнемо.
Хајде да решимо следећи задатак: дат је низ
са бројевима, треба проверити да ли у њему постоји
елемент са вредношћу 3 или не. Ако
постоји - исписаћемо '+++', ако не -
исписаћемо '---'.
За почетак хајде да пробамо да испишемо '+++'.
За то ћемо прећи преко свих елемената нашег низа
и помоћу if проверавати - да ли је тренутни
елемент једнак вредности 3. Ако јесте - исписаћемо
'+++':
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
}
}
Али наше решење није баш најбоље: јер ако
у низу буде не једна вредност 3,
већ више, онда ће се '+++' исписати више
пута. Хајде да исправимо наш низ (направимо
два елемента са вредношћу 3) и уверимо се у то:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // исписаће више пута
}
}
Исправимо проблем: завршићемо циклус помоћу
break, ако је елемент већ пронађен:
let arr = [1, 2, 3, 4, 3, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++');
break; // заврши циклус
}
}
Хајде сада да пробамо да урадимо тако да,
ако у низу уопште нема елемената са вредношћу
3, испише се '---'. Често
погрешно се дода else
нашој if наредби - у том случају ће се '---'
исписати за све елементе који нису
3:
let arr = [1, 2, 3, 4, 5];
for (let elem of arr) {
if (elem == 3) {
console.log('+++'); // исписаће се на елементу 3
} else {
console.log('---'); // исписаће се на елементима 1, 2, 4, 5
}
}
Дакле, идеја да се дода else - лоша
идеја, не функционише. За решавање задатака овог
типа (такви задаци се довољно често
срећу) користе се такозвани флагови.
Као што је већ напоменуто горе, флаг је таква
променљива, која може имати две вредности:
true или false.
Дакле, хајде да направимо променљиву flag
са оваквом вредношћу: ако је једнака true,
онда у низу постоји елемент 3, а ако је
false, онда таквог елемента нема.
У почетку поставићемо променљиву flag
на вредност false - то јест сматраћемо,
да елемента 3 у низу нема:
let arr = [1, 2, 3, 4, 5];
let flag = false; // сматрамо да елемента 3 нема у низу
Затим ћемо покренути циклус са if као што смо то радили
раније. Ако циклус открије да у низу
постоји елемент 3 - онда ћемо поставити променљиву flag
на вредност true и изаћи из циклуса
помоћу break:
let arr = [1, 2, 3, 4, 5];
let flag = false; // сматрамо да елемента 3 нема у низу
for (let elem of arr) {
if (elem == 3) {
flag = true; // елемент постоји - променимо променљиву flag
break; // излазимо из циклуса
}
}
Одговор на питање, да ли у низу постоји 3
или не, можемо дати тек после циклуса.
А тај одговор већ имамо: после циклуса
променљива flag је могла да остане false
или је могла да промени своју вредност на true,
ако је циклус открио у низу 3:
let arr = [1, 2, 3, 4, 5];
let flag = false;
for (let elem of arr) {
if (elem == 3) {
flag = true;
break;
}
}
// овде променљива flag је или true, или false
Сада после циклуса можемо направити if, који
ће погледати променљиву flag и исписати
на екран '+++' или '---':
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('---');
}
Дат је низ:
let arr = ['a', 'b', 'c', 'd', 'e'];
Проверите да ли у овом низу постоји елемент
'c'. Ако постоји - испишите '+++',
а ако не - испишите '---'.
Напишите код који ће проверавати број да ли је прост или није. Прост број дели се само са јединицом и самим собом, а не дели се са другим бројевима.