Мы уже познакомились с несколькими типами данных, такими как Int
, Double
и String. В данном уроке будет рассмотрен тип данных, который используется с операторами сравнения.
Содержание статьи
- Булевы, или логические операторы в Kotlin
- Булева логика в Kotlin
- Равенство строк в Kotlin
- Задания для проверки
При сравнении двух чисел для поиска наибольшего 1 > 2
ответом будет либо истина, либо ложь. В Kotlin для этого предусмотрен отдельный тип данных — Boolean
. Тип был назван так в честь довольно умного человека по имени Джордж Буль, который ввел целую математическую область, рассматривающую понятия истинного и ложного.
В Kotlin булев тип используется следующим образом:
1 2 | val yes: Boolean = true val no: Boolean = false |
В Kotlin есть вывод типа, поэтому сам тип можно не указывать, Kotlin сам поймет какой это тип:
1 2 | val yes = true val no = false |
Булево значение может быть только истинным или ложным, для чего используются ключевые слова true
и false
. В коде выше, ключевые слова используются для указания состояния каждой константы.
Boolean, или логические операторы в Kotlin
Булев тип используется для сравнения значений. К примеру, когда нужно узнать, равны ли два значения, результат будет либо true
, либо false
.
В Kotlin для этого используется оператор равенства, который обозначается как ==
:
1 | val doesOneEqualTwo = (1 == 2) |
Kotlin знает, что типом константы doesOneEqualTwo
является тип Boolean
. Очевидно, что 1 не равен 2. Следовательно, константа doesOneEqualTwo
будет false
.
Аналогичным образом можно выяснить, не равны ли два значения через использование оператора !=
:
1 | val doesOneNotEqualTwo = (1 != 2) |
На этот раз сравнение истинно (true), потому что 1 не равна 2, и константа doesOneNotEqualTwo
будет true
.
Оператор префикс !
переключает true
на false
и наоборот. Выше указанный код можно написать следующим образом:
1 | val alsoTrue = !(1 == 2) |
Так как 1 не равна 2, (1 == 2)
принимает значение false
, и затем !
переключает это на true
.
Еще два оператора помогают узнать если одно значение больше (>
) или меньше (<
) другого значения. Вам они должны быть знакомы с уроков математики:
1 2 | val isOneGreaterThanTwo = (1 > 2) val isOneLessThanTwo = (1 < 2) |
Несложно понять, что константа isOneGreaterThanTwo
будет false
, а константа isOneLessThanTwo
будет true
.
Также существует оператор, который проверяет, меньше значение другого значения или равно ему: <=
. Это комбинация <
и ==
, поэтому будет возвращено значение true
, если первое значение меньше второго или равно ему.
Точно так же есть оператор, который позволяет проверить, больше ли значение или равно другому: >=
.
Булева логика в Kotlin
В каждом из приведенных выше примеров проверяется только одно условие. Когда Джордж Буль ввел булевы значения, у него были более грандиозные планы. Он изобрел булеву логику, которая позволяет комбинировать несколько условий для формирования результата.
Один из способов комбинировать условия — использовать AND (И). Когда вы соединяете с AND (И) два булевых значения, результатом является другое булево значение. Если оба входных значения истинны, результат будет истинным. В противном случае результат будет ложным.
В Kotlin оператором для AND (И) является &&
:
1 | val and = true && true |
В данном случае константа and
будет равна true
. Если бы какое-то из значений справа было false
, тогда and
тоже равнялась бы false
.
Другим способом соединения условий является использование OR (ИЛИ). При использовании OR с двумя булевыми значениями результат будет true
, если хотя бы одно из булевых значений истинно. Только если оба значения ложны, результат будет равен false
.
В Kotlin для булева оператора OR используется ||
:
1 | val or = true || false |
В данном случае константа or
будет равна true
. Если бы оба значения справа были false
, тогда константа or
тоже была бы равна false
. Если бы они оба были true, тогда значением константы or
по-прежнему было бы true
.
В Kotlin булева логика обычно используется, когда есть несколько условий. Возможно, требуется определить, если два условия истинны. В данном случае можно использовать AND. Если нужно выяснить, является ли истинными хотя бы одно из двух условий, тогда можно использовать OR.
К примеру, рассмотрим следующий код:
1 2 3 4 5 | val andTrue = 1 < 2 && 4 > 3 val andFalse = 1 < 2 && 3 > 4 val orTrue = 1 < 2 || 3 > 4 val orFalse = 1 == 2 || 3 == 4 |
В каждом случае проверяются два разных условия, которые соединяются с помощью AND
или OR
.
Также можно использовать булеву логику для объединения более двух сравнений. К примеру, можно создать сложное сравнение вроде следующего:
1 | val andOr = (1 < 2 && 3 > 4) || 1 < 4 |
Скобки устраняют неоднозначность выражения. Сначала Kotlin оценивает выражение внутри круглых скобок, а затем оценивает все выражение, выполнив следующие этапы:
1 2 3 4 | 1. (1 < 2 && 3 > 4) || 1 < 4 2. (true && false) || true 3. false || true 4. true |
Равенство строк в Kotlin
Зачастую требуется определить, равны ли две строки. К примеру, для детской игры по угадыванию названий животных по фото потребуется определить, ответил ли игрок правильно.
В Kotlin можно сравнить две строки через использование оператора равенства ==
. Все делается точно так же, как и в случае сравнения чисел. К примеру:
1 2 | val guess = "dog" val dogEqualsCat = guess == "cat" |
Здесь у константы dogEqualsCat
булев тип, ее значения равно false
, потому что "dog"
не равна "cat"
. Все просто!
Как и в случае с числами, здесь можно не только узнать, являются ли строки равными, но и сравнить их. К примеру:
1 | val order = "cat" < "dog" |
Синтаксис проверяет, если одна строка идет раньше по алфавиту. В данном случае константа order
равно true
, потому что "cat"
идет раньше по алфавиту, чем "dog"
.
Задачи для проверки
- Создайте константу
myAge
, значением которой будет ваш возраст. Затем создайте константуisTeenager
, которая использует булеву логику для определения, находится ли возраст в промежутке от 13 до 19; - Создайте другую константу под названием
theirAge
, значением которой будет 30. Затем создайте константуbothTeenagers
, которая использует булеву логику, чтобы определить, являются ли оба человека подростками; - Создайте константу
reader
, значением которой будет ваше имя. Создайте константуauthor
, значением которой будет имя «Richard Lucas». Создайте константуauthorIsReader
, которая использует равенство строк, чтобы определить, равны лиreader
иauthor
; - Создайте константу
readerBeforeAuthor
, которая использует сравнение строк, чтобы определить, следует лиreader
передauthor
по алфавиту.
Спасибо огромное за объяснение. Самому разобраться очень сложно в этом.