Java для Android-разработчиков. Часть #2
Приоритеты операций
Приоритете операций в программировании, похожи на приоритеты в обычной математике. Когда мы видим какое-то математическое выражение, встает вопрос очередности выполнения. Как мы помним из школьной математики, первым вычисляется то, что написано в скобках. Потом умножение и только в последнюю очередь сложение. В качестве результата, в переменную number запишется число 11.
int number = 3+2*(2+2); // 11
Часто в программировании можно встретить такое выражение:
int sum = number++
++ - это постфиксный инкремент, который переменную number увеличивает на единицу. Следующее выражение может ввести в ступор любого новичка. Первые два плюса увеличивают переменную на единицу, а второй плюс прибавляет единицу (обычная операция сложения).
int sum = number++ +1; // 13
Здесь главный вопрос, в каком порядке будут выполняться эти действия? В исходном значении переменной number храниться число 11. Сначала выполняется действие сложения, вместо number подставится число 11 и прибавится единица (11+1). У нас получится число 12, которое запишется в переменную sum и только после этого выполнится number++. Значение переменной sum увеличится на единицу и будет равняться 13-ти. Это говорит о том, что приоритет у операции присваивания самый низкий, то есть он выполняется фактически после всего того, что встретится в правой части выражения. Ниже по приоритету только операция инкремента.
- математическое действие
- присваивание
- операция инкремента
Логические операции
Операция сравнения обозначается двумя символами равно (==), поскольку одинарное равно (=) уже используется для операции сравнения. Мы сравниваем между собой две переменные: sum и number, а результат записываем в переменную equal.
boolean equal = sum == number;
Приведу более сложный пример с участием постфиксным инкрементом. Сначала сравниваем sum и number, затем записываем результат в переменную equalSecond и только в последнюю очередь выполняется операция ++.
boolean equalSecond = sum++ == number;
Противоположностью операции равно (==), является операция не равно (!=). Когда мы пытаемся выяснить, что две переменные не равны между собой.
boolean equal = sum != number;
Восклицательный знак в логическом выражении обозначает отрицание. Когда мы хотим узнать, является ли ребенок девочкой, то мы идем от обратного: проверяем, что это не мальчик.
boolean isBoy = true, isGirl = true, isHistory = true;
boolean isGirl = !isBoy; // true
Логическое "и" - &&
Например мы хотим отсортировать мальчиков для экскурсии в исторический музей. Во первых мы проверяем, что это вообще мальчик и что он интересуется историей.
boolean goMuseum = isBoy && isHistory; // && - логическое "и"
Можно отсортировать и по пути отрицания - мы ищем не девочек.
boolean goMuseum = !isGirl && isHistory; // && - логическое "и"
Логическое "или" - ||
Например у нас есть какое-то устройство с набором свойств. Нам нужно опираясь на свойство установить, что это за устройство, телефон или планшет?
boolean isPhone = true, isTablet = false, hasAndroid = true, hasIOS = false;
Допустим, мы считаем что это Android смартфон. Так и запишем - это телефон (переменная isPhone) и Android (переменная hasAndroid).
boolean isAndroidPhone = isPhone && hasAndroid; // true
Но кроме операции "и" у нас еще есть операция "ИЛИ". Мы проверяем, что это у нас либо телефон, либо планшет с установленной IOS. У логических операций тоже есть приоритете. Сначала мы вычисляем с оператором &&, поскольку у "и" выше приоритет. Результатом будет false. Затем выполняем операцию "ИЛИ" между isPhone (true) и предыдущим результатом false. В конечном итоге в переменную isAppleDevice запишется true.
Не будем подробно останавливаться на простых операциях больше (>), меньше (<), больше равно (>=), меньше равно (<=). С ними и так все понятно.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.