Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

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

#java #логические_выражения


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

Пример

boolean haveFive = false; // флаг наличия 5ки в массиве

int[] a = new int[10]; // массив из 10 элементов

for (int i = 0; i < 10; i++) {
    a[i] = new Random().nextInt(10); // инициализация массива случайными значениями
от 0 до 9
    if (a[i] == 5) { // если в массиве есть 5 устанавливаем флаг в true
        haveFive = true;
    }
}

if (haveFive) {
    // выполняем некоторые действия
}

    


Ответы

Ответ 1



Переменная флаг – это, как правило, переменная логического типа, значение который характеризует состояние некоторого объекта. В примере haveFive переменная которая хранит состояние есть ли в массиве пятерка. Это переменная, которую вы можете использовать для управления потоком функции, позволяя вам проверять определенные условия во время выполнения вашей функции. if (haveFive) { // если в массиве есть пятерка // выполняем некоторые действия }

Ответ 2



Не очень понятен вопрос, тем не менее попробую ответить в меру своего понимания. Флаг это некая переменная, которая по сути является статусом некоторого объекта/сущности/множества. В классическом варианта флаг это булевская переменная, в более расширенном толковании флаг может иметь и несколько значений. В зависимости от значения флага используется ветвление логики программы if и/или switch Когда использовать? Флаги используются, когда статус сущности есть некая сложновычисляемая штука, поэтому чтобы зря не тратить каждый раз вычислительные ресурсы удобно запомнить статус сущности в виде флага и дальше использовать в логике программы. Например, в вашем случае то что массив содержит хотя бы одну пятерку - есть флаг.

Ответ 3



Не могу не запостить цитату из любимого мною "Чистого кода" Аргументы-флаги уродливы. Передача логического значения функции — воистину ужасная привычка. Она немедленно усложняет сигнатуру метода, громко провозглашая, что функция выполняет более одной операции. При истинном значении флага выполняется одна операция, а при ложном — другая! В листинге 3.7 у нас нет выбора, потому что вызывающая сторона уже передает этот флаг, а я хотел ограничить область переработки границами функции. Тем не менее вызов метода render(true) откровенно сбивает с толку бедного читателя. Если навести указатель мыши на вызов и увидеть render (boolean isSuite), ситуация слегка проясняется, но ненамного. Эту функцию следовало бы разбить на две: renderForSuiteO и renderForSingleTestO.

Ответ 4



Ну то что переменная-флаг нужна для хранения некоторого булевого результата (в данном случае будет ли в массиве хотя бы одна пятерка) вам уже написали, но надо заметить, что очень часто (и в данном случае) переменная-флаг не нужна, так как можно просто вынести функцию (и это будет работать быстрее): ... if(isHaveFive()) { // выполняем некоторые действия } } private static boolean isHaveFive() { int[] a = new int[10]; // массив из 10 элементов for (int i = 0; i < 10; i++) { a[i] = new Random().nextInt(10); // инициализация массива случайными значениями от 0 до 9 if (a[i] == 5) { // если в массиве есть 5 устанавливаем флаг в true return true; } } return false; }

Комментариев нет:

Отправить комментарий