#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; }
Комментариев нет:
Отправить комментарий