Что такое флаг в программировании

Что такое флаг в программировании

Веселье с флагами, только не веселье

Когда мы писали тетрис на JavaScript, то использовали в нём флаг остановки игры:

// ставим флаг окончания
gameOver = true;

В тот раз мы не останавливались на флагах подробно, поэтому сделаем это сегодня — расскажем, что такое флаг в программировании и для чего он нужен.

Флаг — это индикатор

Когда водитель садится за руль машины, то он видит много индикаторов — приборов и лампочек, которые:

  • показывают нам состояние различных узлов в машине (обороты двигателя);
  • показывают, включён или выключен какой-то прибор (например, кондиционер или ближний свет);
  • напоминают, что нужно что-то сделать (пристегнуться);
  • сигнализируют о неисправности (контрольная лампа давления масла, если уровень масла в двигателе слишком низкий).

Глядя на эти индикаторы, водитель понимает, что ему нужно сделать — пристегнуться, остановиться, чтобы долить масло в двигатель или ничего делать не нужно.

Флаги в программировании делают то же самое — показывают, что происходит в программе, чтобы алгоритм или человек мог принять решение. 

Программные флаги — это переменные, а аппаратные флаги используются в процессорах.

Откуда такое название

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

Программный флаг — это переменная

В случае с тетрисом мы взяли логическую переменную gameOver и присвоили ей значение true — это называется «установить флаг». Эта переменная показывает, закончилась игра или нет: если true, то да, закончилась, а если false — можно играть дальше.

Но флаг сам по себе бесполезен, если на него никто не смотрит. Если мы просто установим флаг, то игра не закончится сама по себе — нам нужно периодически проверять, в каком состоянии флаг. Для этого в код в нужных местах добавляют проверку флага: смотрят, чему равен флаг, и если он сработал — выполняют определённые действия. В тетрисе мы делаем это в самом начале обработчика нажатия клавиш — если флаг сработал, то сразу останавливаем игру и выводим надпись Game Over.

Аппаратный флаг — регистр в процессоре

Процессор — это микросхема из миллиардов транзисторов, но ему тоже иногда нужны флаги, чтобы понять:

  • перед ним чётное число или нет;
  • произошло ли переполнение буфера;
  • есть ли что-то в стеке, куда нужно вернуться после этой операции;
  • в каком режиме работать.

Для этого в процессоре есть специальные регистры — хранилища данных, которые могут принимать различные значения. Технически это тоже как бы виртуальные переменные, только они влияют не на одну программу, а на весь процессор. 

Аппаратные флаги в процессоре обрабатываются автоматически, в зависимости от используемых команд. 

Зачем нужны флаги

Главная задача флага в программировании — показать, что что-то изменилось и что нужно на это отреагировать. Например:

  • кубик вылез за игровое поле и нужно остановить игру; 
  • пользователь слишком много раз ввёл неправильный пароль — тогда программа поставит флаг и в ближайший час не пустит его в систему;
  • процедура закончила рисовать интерфейс и установила свой флаг — в этом случае система поймёт, что можно разрешить пользователю нажимать на кнопки;
  • система заметила подозрительную активность и установила специальный флаг — в этом случае она будет записывать все действия пользователя, пока флаг не снимется.

👉 Короче:

Флаг — удобный способ передать информацию внутри алгоритма, чтобы в нужный момент принять верное решение.

Рекламный блок «Яндекс Практикума»
Этот рекламный блок сообщает, что после обучения в «Яндекс Практикуме» вы можете получить высокооплачиваемую работу разработчика, тестировщика, аналитика, менеджера и дата-сайентиста.
В конце кнопка
Рекламный блок «Яндекс Практикума» Рекламный блок «Яндекс Практикума» Рекламный блок «Яндекс Практикума» Рекламный блок «Яндекс Практикума»

Текст:

Михаил Полянин

Редактор:

Максим Ильяхов

Художник:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Алина Грызлова

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Чем отличается C от C++
Чем отличается C от C++

На 99% — ничем, но в C++ есть родная поддержка ООП.

easy
Что такое функциональное программирование
Что такое функциональное программирование

Это не про функции!

easy
Как прокачать буфер обмена
Как прокачать буфер обмена

И что это вообще такое

easy
Soft Skills в ИТ: что это, для чего и как развивать
Soft Skills в ИТ: что это, для чего и как развивать

Почему разработчики с навыками управления стоят дороже

easy
Что такое демоны и службы в программировании
Что такое демоны и службы в программировании

Это маленькие программы, которые работают в фоновом режиме

easy
Карьерные перспективы в ИТ с учетом сложившейся ситуации
Карьерные перспективы в ИТ с учетом сложившейся ситуации

Что нужно знать тем, кто хочет стать айтишником в 2022-м году

easy
Как работает икрокрасный порт
Как работает икрокрасный порт

То есть инфракрасный, мы хотели сказать. Инфракрасный

easy
Что такое бэкап, зачем он нужен и как его делать
Что такое бэкап, зачем он нужен и как его делать

Каждый разработчик однажды ЛИШИЛСЯ ВСЕГО, потому что не сделал бэкап.

easy
Что такое куча в программировании
Что такое куча

Это зависит от содержимого.

medium
Что такое образ диска
Что такое образ диска

TLDR: это точная копия диска в виде файла

easy
easy