June 2, 2020

Работа с флагами в JavaScript

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

Попробуем решить следующую задачу: у нас есть массив с числами, нужно проверить, есть ли в нем элемент со значением 4 или нет. Если есть - выведем "Присутствует!", если нет - выведем "Отсутствует!".

Для начала давайте попробуем вывести "Присутствует!". Для этого переберем все элементы нашего массива и с помощью if будем спрашивать - равен ли текущий элемент значению 4. Если равен - выведем "Присутствует!":

Наше решение не очень хорошее: поскольку, если в массиве будет не одно значение 4, а несколько, то "Присутствует!" выведется несколько раз. Давайте исправим наш массив и сделаем два элемента со значением 4, чтобы убедится в этом:

Давайте теперь попробуем сделать так, чтобы, если в массиве вообще нет элементов со значением 4, выводилось "Отсутствует!". Распространенным заблуждением будет добавить else к нашему if - в этом случае "Отсутствует!" будет выводиться на все элементы, не являющиеся 4:

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

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

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

после цикла переменная flag могла остаться false или могла сменить свое значение на true, если цикл обнаружил в массиве 4.

Теперь после цикла мы можем сделать if, который посмотрит на переменную flag и выведет на экран "Присутствует!" или "Отсутствует!":