@rraderio

Для чего нужны переменные флаги?

Я только недавно натолкнулся на этот термин, и я не понимаю для чего они нужны.
Я не уверен, когда использовать переменную флаг и как это сделать?
Если можно с примерами на Java. Спасибо.

boolean flag = false;
  • Вопрос задан
  • 11876 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Stqs
senior software developer
не нужно воспринимать флаги как что-то супер-специфическое или суперсложное
это не более чем обычная переменная которая влияет на поток программы

пример из жизни
вы программируете целый день на работе и вечером идете домой
допустим в течении дня может позвонить супруга и попросить зайти вечером в магазин (выставляет флаг ЗАЙТИ_В_МАГАЗИН = True)
в конце дня этот флаг проверяется - если он True - то мы зайдем в магаз, если нет - соответственно не зайдем

нюансы здесь:
- флаг может быть выставлен в ЛЮБОЕ время
- флаг не обязательно выставляете Вы сами!
- Ваша реакция на флаг не обязательно сиюминутная
- перед уходом домой лучше позвонить супруге и уточнить состояние флага :)

флаг не обязательно должен быть буленовской переменной, это понятие скорее логическое, например вместо флага ЗАЙТИ_В_МАГАЗИН (при котором не совсем понятно что покупать то) может использоваться более умная конструкция типа ArrayList списокПокупок = {}. Вначале дня список пустой, в течении дня жена вспоминает чтото - и дописывает вещи в спискоПокупок
в конце дня вы просто проверяете - пуст ли список (флага нет) - и тогда идете домой с чистой совестью
если же там есть хоть что-то (флаг поднят) - Вы уже знаете что 1) идти нужно 2) что именно нужно купить
Ответ написан
Комментировать
NeiroNx
@NeiroNx
Программист
Переменные флаги как правило глобальные переменные булевого типа и используется обычно для синхронизации выполнения подпрограмм в разных потоках. Понятие флаг установлен, флаг снят - эквивалентно true и false.
Ответ написан
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Используется точно так же и все остальные переменные - для временного или постоянного хранения логического значения, передачи его куда-то еще, или хранения результата вызова какой-то функции/процедуры. Например WinAPI может возвращать логический флаг.

bool flag = true;
while(flag){
    flag = doSomeJob();
}


Или вот еще реальный пример - паттерн "Dispose" в C#:
private bool disposedValue = false; // Для определения избыточных вызовов

protected virtual void Dispose(bool disposing)
{
    if (!disposedValue)
    {
        if (disposing)
        {
            // TODO: освободить управляемое состояние (управляемые объекты).
        }

        // TODO: освободить неуправляемые ресурсы (неуправляемые объекты) и переопределить ниже метод завершения.
        // TODO: задать большим полям значение NULL.

        disposedValue = true;
    }
}

// TODO: переопределить метод завершения, только если Dispose(bool disposing) выше включает код для освобождения неуправляемых ресурсов.
// ~Cloud() {
//   // Не изменяйте этот код. Разместите код очистки выше, в методе Dispose(bool disposing).
//   Dispose(false);
// }

// Этот код добавлен для правильной реализации шаблона высвобождаемого класса.
public void Dispose()
{
    // Не изменяйте этот код. Разместите код очистки выше, в методе Dispose(bool disposing).
    Dispose(true);
    // TODO: раскомментировать следующую строку, если метод завершения переопределен выше.
    // GC.SuppressFinalize(this);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы