Применение флагов
Концепцию флагов проще всего понять на тюбике зубной пасты. Сейчас перед покупкой зубной пасты мы можем заглянуть под крышку и посмотреть, есть ли там защитная пленочка. Сам факт наличия этой пленки гарантирует нам, что этой зубной пастой никто не пользовался. Напротив ее отсутствие должно нас насторожить. Наличие этой защитной пленки несет для нас информацию, в равной степени как и ее отсутствие.
Если бы паста продавалась без защитной пленки (как это было ранее), мы могли бы только надеется на то, что нашей зубной пастой никто не воспользовался. То есть защитная пленка - это механизм, который сохраняет для нас информацию о событии использования пасты.
В JavaScript'е для сохранения информации нам не нужна защитная пленка. Мы можем просто создать переменную!
Как правило, для флагов используют переменную типа Boolean
var flag = false;
Изначально флаг может быть в одном состоянии, например флаг опущен, затем если произошло важное для нас событие состояние флага может измениться на флаг поднят. Флаг может быть изначально поднят, а если произошло что-то неудобное для нас, то мы его опустим.
Возьмем к примеру такую задачу. Есть массив, нужно узнать есть ли в нем пятерки.
Обычно учащиеся первым делом пишут вот такой вот код
var flag = false;
var arr = [8,4,5,33,5,2,11];
for (i=0;i<arr.length;i++) {
if (arr[i]===5) {
console.log('Ура! В массиве есть пятерка');
}
}
Проблема этого кода в том, что если нам в массиве встретится две пятерки 'В массиве есть пятерка' выведется несколько раз. Если же пятерок не будет в массиве, для нас вообще не будет никакого сообщения.
var flag = false;
var arr = [8,4,5,33,5,2,11];
for (i=0;i<arr.length;i++) {
if (arr[i]===5) {
flag = true;
}
}
if (flag) {
console.log('Ура! В массиве есть пятерка');
} else {
console.log('Пятерки в массиве не было');
}
Практика:
- Вывести слова разделенные запятой
- "Опавшие листья". Есть массив чисел. Нужно вывести числа в квадратах. Изначально квадраты зеленые, но если встретилось число меньше 8, квадраты становятся желтыми. Если встретилось отрицательное число, квадраты становятся серыми.
"Джекпот". Есть блоки с числами. Проверить, есть ли у нас в блоках три семерки подряд.
Есть блоки с числами. Проверить есть ли блоки, в которых семерка стоит сразу за пятеркой.