Все операторы сравнения языка Котлин
В этой статье разложим по полочкам значения терминов, связанных с логическим типом данных. Конкретно рассмотрим: логические операторы, операторы сравнения и присваивания.
Начнем с последнего. Раз и навсегда определим, что оператор присваивания, как вы уже знаете – обозначается знаком равно. Он присваивает данные справа от знака равно данным слева. А оператор “двойное равно” является оператором сравнения. Он сравнивает два значения между собой.
<, >, >=, <=, ==, !=
Все, кроме последних двух используются в классической математике. Оставшиеся это оператор сравнения (равенства) и неравенства значений.
Все эти операторы сравнивают между собой данные различных типов. Результатом сравнения всегда могут быть только два значения: истина (обозначается как true) или ложь (обозначается как false). Такие операции еще называют “Операции отношения”.
Операторы ссылочного типа
И есть еще операторы ссылочного сравнения. О них поговорим отдельно, просто знайте, что они есть. Оператор ссылочного сравнения “равно” и “не равно” соответственно.
===, !==
Результат сравнения будет истиной, если обе сравниваемые переменные ссылаются на один объект и наоборот.
Возвращающий результат
Следующие примеры наглядно покажут, как операторы могут возвращать результат сравнения.
Представим, что в вашем разрабатываемом приложении есть скрытый контент, который доступен, только если пользователю исполнилось 18 лет. Пользователь вводит свой возраст и в определенном месте ваша программа должна обработать введенное число и выдать положительный или отрицательный результат.
Добавим возрастной порог, с которым будем сравнивать возраст пользователя. Объявим переменную, которая будет константой. То есть ее значение не должно поменяться ни при каких обстоятельствах. Константы нельзя объявлять локально, поэтому вынесем ее за пределы метода. Также константы принято писать большими буквами, разделяя слова нижним подчеркиванием. Официально этот стиль написания называется UPPER CASE в сочетании со snake_case.
const val AGE_OF_MAJORITY = 18
Введенный пользователем возраст будет храниться в переменной userAge. Допустим, это будет 42 года.
val userAge = 42
Создание переменной логического типа Boolean
Теперь будем сравнивать полученный возраст с блокирующим и сохранять результат сравнения в переменную comparisonResult. Создадим эту переменную с явным указанием логического типа Boolean. Теперь в нее можно поместить одно из двух значений: true или false.
val comparisonResult: Boolean
Инициализация переменной
Первый момент, который нужно отметить. Созданную переменную уже можно проинициализировать значением true или false и она будет его хранить. Для демонстрации присвоим ей значение false и выведем значение переменной в консоль.
val comparisonResult: Boolean = false
println(comparisonResult)
false
Результат сравнения какого-либо выражения
Зафиксировали. Второй ключевой момент – в переменную можно положить результат сравнения какого-либо выражения (простого или составного). Именно этот кейс мы будем использовать в нашей программе по распознаванию возраста. Начнем сравнивать возраст пользователя с константным возрастом.
val comparisonResult: Boolean
comparisonResult = userAge >= AGE_OF_MAJORITY
println(comparisonResult)
true
Да, 42 больше или равно, чем число 18. Поэтому нашему пользователю откроется страница со скрытым контентом. Помним, что данные сначала сравниваются, затем результат присваивается переменной слева от знака равно. Но давайте оформим результат более красиво, используя интерполяцию строк, о которых мы говорили ранее.
println("Результат проверки возраста пользователя: $comparisonResult")
Так гораздо лучше. Если подставить в качестве возраста пользователя другие значения, изменится и результат, например, пусть это будет подросток 15 лет. В консоли выведется результат сравнения false.
Для пущей наглядности вот еще пара простейших примеров:
Код
Вывод в консоль
println(0 < -1)
println(1 == 1)
println(2 == 3)
println(7 != 8)
false
true
false
true
Логические операторы в Kotlin
Идем дальше, рассмотрим логические операторы. Они помогут нам создать составное выражение сравнения, когда нужно сравнивать несколько условий одновременно.
Логические операторы выглядят и произносятся так: ‘и’, ‘или’, ‘не’
&&, ||, !
Логический оператор «и» (&&)
Чтобы понять, как их использовать, давайте дополним бизнес требования к нашей программе. От них будем отталкиваться. Представим, что скрытый контент доступен пользователям от 18 лет (это мы уже реализовали) и, например, пользователям до 65 лет.
То есть будет промежуток от 18 до 65. Это означает, что у нас появляется уже два условия, которые нужно проверять. Что возраст больше или равен 18 и меньше или равен 65.
Добавим новую необходимую для работы константу и напишем это.
const val RETIREMENT_AGE = 65
comparisonResult = userAge >= AGE_OF_MAJORITY && userAge <= RETIREMENT_AGE
Здесь мы используем логический оператор &&. Он гарантирует, что результат будет формироваться исходя из двух сравнений. Если одно из сравнений вернет false, то конечный результат comparisonResult будет false. И еще момент. Здесь я не занес операции отношения в круглые скобки, потому что это не обязательно (это связано с приоритетами выполнения операций). Но рекомендую ставить такие скобки для повышения читабельности в более сложных составных выражениях. Кроме того, скобки обязательны, если вы хотите использовать инфиксные функции and или or, вместо символов ‘И’ и ‘ИЛИ’. Не будем заострять на них внимание сейчас, но выглядит это вот так:
comparisonResult = (userAge >= AGE_OF_MAJORITY) and (userAge <= RETIREMENT_AGE)
Логический оператор «или» (||)
Далее. Оператор || позволяет также делать комбинированные условия. В этом случае comparisonResult будет true, если хотя бы одно из сравнений вернет true. Первое или второе. Если возраст больше или равен совершеннолетию или если возраст равен или менее пенсионного возраста.
comparisonResult = (userAge >= AGE_OF_MAJORITY) || (userAge <= RETIREMENT_AGE)
Логический оператор отрицания (!)
Хорошо, далее. Логический оператор отрицания. Если поставить его перед Boolean-переменной или перед выражением в скобках – он инвертирует значение с true на false и наоборот.
Вот простой пример для переменных. Объявили Boolean-переменную a и присвоили ей true. Объявили переменную b и присвоили ей переменную a, с отрицанием. Таким образом в переменную b записался результат false.
val a = true
val b = !a
println(b)
Чтобы показать на примере нашего выражения, модернизируем его следующим образом. Добавим отрицание перед вторым сравнением и изменим знак на “больше или равно”.
comparisonResult = (userAge >= AGE_OF_MAJORITY) && !(userAge >= RETIREMENT_AGE)
Звучит полностью это так. Конечный результат будет true, если возраст пользователя больше или равен совершеннолетию и, если возраст пользователя НЕ больше или равен пенсионному возрасту.
Наконец хотел бы приоткрыть ширму изящных сокращений в языке Котлин. Текущее выражение сравнения – это ничто иное, как диапазон допустимых чисел между 18 и 65.
Мы можем написать так, практически дословно:
comparisonResult = userAge in BLOCKING_AGE..PENSIA_AGE
И звучит это следующим образом: результат будет true, когда userAge находится в (in) промежутке от 18 до 65. А если мы поставим перед in знак отрицания – то будет означать, что выражение также вернет true, если число находится ВНЕ заданного диапазона.
comparisonResult = userAge !in BLOCKING_AGE..PENSIA_AGE
Для тех, кто собрался стать Android-разработчиком
Пошаговая
схема
Описание процесса обучения от основ Kotlin до Android-разработчика
Бесплатные
уроки
Авторский бесплатный курс по основам языка программирования Kotlin
Обучающий
бот
Тренажер и самоучитель по Котлин – бесплатные тесты и практика