Найти в Дзене
Илья Дмитриев

JavaScript. Урок №12 (работа с флагами)

Приемы работы с флагами Флаг - это специальная переменная, которая может принимать только два значения: true и false. С помощью флагов можно решать задачи, проверяющие отсутствие чего-либо: к примеру, можно проверить, что в массиве нет элемента с определенным значением. Логическим путем попробуем дойти до сути необходимости флагов. Пожалуйста, напишите в комментариях хватило вам или не хватило в данном уроке информации. Все ли подробно изложено или есть какое то непонимание. Итак, решим следующую задачу: дан массив, нужно проверить, есть ли в нем элемент со значением 'c' или нет. Если есть - выведем 'есть', если нет - выведем 'нет'. Если в массиве несколько «с» то алерт сработает несколько раз. Что бы алерт работал только один раз необходимо использовать break. Давайте теперь попробуем сделать так, чтобы, если в массиве вообще нет элементов со значением 'c', выводилось 'нет'. Распространенным заблуждением будет добавить else к нашему ифу - в этом случае 'нет' будет выводиться на в

Приемы работы с флагами

Флаг - это специальная переменная, которая может принимать только два значения: true и false. С помощью флагов можно решать задачи, проверяющие отсутствие чего-либо: к примеру, можно проверить, что в массиве нет элемента с определенным значением.

Логическим путем попробуем дойти до сути необходимости флагов.

Пожалуйста, напишите в комментариях хватило вам или не хватило в данном уроке информации. Все ли подробно изложено или есть какое то непонимание.

Итак, решим следующую задачу: дан массив, нужно проверить, есть ли в нем элемент со значением 'c' или нет.

Если есть - выведем 'есть', если нет - выведем 'нет'.

-2

Если в массиве несколько «с» то алерт сработает несколько раз.

Что бы алерт работал только один раз необходимо использовать break.

-3

Давайте теперь попробуем сделать так, чтобы, если в массиве вообще нет элементов со значением 'c', выводилось 'нет'.

Распространенным заблуждением будет добавить else к нашему ифу - в этом случае 'нет' будет выводиться на все элементы, не являющиеся 'c‘.

-4

Итак, идея добавить else - плохая идея, не рабочая. Для решения задач подобного типа (такие задачи встречаются достаточно часто) используют так называемые флаги.

Флаг - это такая переменная, которая может принимать два значения: true или false.

Как работать с флагами - посмотрим на примере нашей задачи.

Итак, давайте сделаем переменную flag с таким значением: если она равна true - то в массиве есть элемент 'c', а если false - то такого элемента нет.

Изначально поставим переменную flag в значение false - то есть будем считать, что элемента 'c' в массиве нет:

-5

считаем, что элемента 'c' нет в массиве

Запустим цикл с ифом так, как мы делали это раньше. Если цикл обнаружит, что в массиве есть элемент 'c' - то поставим переменную flag в значение true (и выйдем из цикла с помощью break).

-6

Ответ на вопрос, если в массиве 'c' или нет, мы можем дать только после цикла. И этот ответ лежит в переменной flag

Еще раз посмотрим как выгладит флаг:

-7

Последний штрих к этой функции это проверить в каком состоянии находится flag, который нам скажет есть ли в массиве «с» или нет.

-8

Вот таким образом работают флаги.

Давайте решим ту же задачу на 'c', но таким образом: необходимо создать функцию hasElem, которая параметром будет принимать массив и возвращать true, если 'c' есть в массиве, и false - если нет:

-9

//выведет true или false

В этом случае переменная flag и команда break нам не понадобится - вместо них все сделает команда return.

Алгоритм работы функции

Внутри функции запускаем наш цикл с ифом и, если мы попали в иф - делаем return true, тем самым выходя из цикла и из функции. А если цикл прокрутился, но выхода из функции не случилось - после цикла делаем return false:

-10

Запустим нашу функцию:

-11

Еще раз как это работает: если в массиве найдется элемент со значением 'c' - мы выйдем из функции с помiощью return. Но если в массиве не найдется элемент 'c' - выхода из функции не произойдет и выполнение дойдет до команды return false. И получится, что функция вернет false в знак того, что элемент 'c' не найден в массиве.

Задача

Дан массив с числами

const arr = [12, 45, 34,89, 2, 5, 75]

Проверьте, проверьте есть ли в массиве число 5. Если есть - выведите 'да', а если нет - выведите 'нет'.