Ошибка многих начинающих программистов автокликера заключается в том, что они воспринимают операцию сравнения, наравне с + - = и тд. Из-за этого возникают различные недопонимания. Ведь несмотря на то, что в операторе сравнения может быть символ =, на самом деле там ничто никуда не присваивается.
По сути, используя любой логический оператор, ВЫ спрашиваете у процессора, “ТАК ЛИ ЭТО”? То есть, когда вы пишите 1==1 Вы как бы спрашиваете: “Правда, что 1 равно 1?” и получаете ответ “правда” только на языке программирования. В java это “true”. Этот результат-ответ может быть помещен в переменную типа boolean. То есть логическую переменную, либо, по-другому, булеву переменную. Этот тип переменных получил свое название в честь профессора Джорджа Буля. Больше о нем можете прочитать в статье на Википедии.
Также, результат логического сравнения, может быть применен непосредственно в условии, которое принимает булев тип. Это while()/if()/for() и другие.
Булева переменная это такой же контейнер, как и int, Image и тд, только для хранения логического значения.
Рассмотрим код:
Код: Выделить всё
boolean result = 1 != 1;
if(result == true)
log("result equals true");
else
log("result equal false");Для повышения скорости набора кода, в программировании чаще используется иная, более компактная конструкция, нежели та, которую я привел выше. Выглядит она следующим образом
if(result)
Здесь отсутствует часть “== true”. Но вы должны понимать, что на самом деле она там есть.
Стоит обратить внимание на следующий момент. Вы можете спросить у процессора не только, “правда ли …” но и “ложно ли утверждение, что …?”
Тогда предыдущее условие будет выглядеть так
Код: Выделить всё
if(result != true)
//либо сокращенный вариант
if(!result)Например
Код: Выделить всё
boolean result = true;
if(result == true)
log("результат истинный");
if(result != false)
log("результат не ложный");Только в первом случае вы спрашиваете: “Переменная result имеет истинное значение?” и получаете ответ true, который приводит к выполнению истинного пути условного ветвления.
Во втором же случае спрашиваете: “Переменная result ведь хранит не ложное значение?”, на что процессор отвечает: “Да, true, там не ложное значение”. И во втором условном ветвлении тоже выполняется “истинный путь”.
Теперь внимательно посмотрите на этот код:
Код: Выделить всё
boolean result = false;
if(result != true)
log("Выполнилось истинное ветвление");
if(result == false)
log("Выполнилось второе истинное ветвление");Оператор условного перехода if сработает только в случае, если результат выражения внутри круглых скобок, возвратит true. Несмотря на то, что переменная result равна false, в обоих случаях в лог будет помещена строка. Ведь в первом выражении мы спросили: “Результат ведь не истинный?”, а во втором: “Результат ведь ложный?” На что получили ответы “true, результат не истинный” и “true, результат ложный”.
Вот такая вот, казалось бы, абракадабра, которая, при этом, абсолютно логична.
Все вышесказанное касается и других операторов, которые работают с логическими значениями. Рассмотрим, для примера, цикл while.
Когда вы пишите while( !EXIT ) это не какая-то там страшная конструкция, придуманная Альбусом Дамблдором. while это один из нескольких видов циклов. Он выполняется только до тех пор, пока логический результат, полученный после вычисления значения, записанного в круглых скобках, равен true. Перепишем условие более наглядно while( EXIT != true) . Наверное, у вас должен возникнуть вопрос: “А что же тогда такое этот EXIT” , а это самая обыкновенная переменная, которая зашита в каждом скрипте по умолчанию и имеет значение false. По крайней мере до тех пор, пока вы не нажмете кнопку остановки скрипта. Тогда в нее помещается значение true, что и приводит к выходу из цикла.
То есть, объявляя условие “бесконечного” цикла таким образом, вы спрашиваете: ”Правда ли, что переменная EXIT не содержит истинное значение?” Процессор отвечает true. Это true как бы “помещается” между круглых скобок вместо условия, и цикл while проходит еще одну итерацию. Если написать while(EXIT == false) результат будет точно таким же. Просто о значении переменной, вы спросите другими словами.
Очень надеюсь, что смог хоть немного улучшить ваше понимание данной темы. Если же это не так, создайте тему, либо напишите мне в ЛС и расскажите, как я могу улучшить данную статью. До встречи!