Логика и Циклы в Kotlin
Логика
Что такое "Логика" в
Kotlin
Логика в программировании, включая Kotlin
, включает в себя использование условных операторов для
управления потоком выполнения программы на основе определённых условий. Основные элементы логики
в Kotlin - это операторы if
, else if
и else
.
Операторы
Их есть совсем немного, а именно:
==
- Оператор равенства. Проверяет, равны ли два значения между собой.
- Если равны - возвращает
true
, иначе -false
:Примерval a = 5
val b = 5
val c = 3
(a == b): return true
(b == c): return false===
- Строгий оператор равенства. Проверяет, ссылаются ли два объекта на одну и ту же память.
- Если ссылаются - возвращает
true
, иначе -false
:Примерval a = Any()
val b = Any()
val c = OtherClass()
(a === b): return true
(b === center): return false!=
- Противоположность оператору==
.
- Если они не равны - возвращает
true
, иначе -false
:Примерval a = 10
val b = 6
val c = 6
(a != b): return true
(b != c): return false>
- Оператор "БОЛЬШЕ". Проверяет, больше ли одно значение другого.
- Если больше - возвращает
true
, иначе -false
:Примерval a = 3
val b = 0
(a > b): return true
(b > a): return false>=
- Оператор "БОЛЬШЕ, ЛИБО РАВНО".
- Если одно значение больше, либо равно второму - возвращает
true
, иначе -false
:Примерval a = -1
val b = -87
val c = -1
(a >= b): return true
(a >= c): return true
(b >= a): return false<
- Оператор "МЕНЬШЕ". Проверяет, меньше ли одно значение другого.
- Если меньше - возвращает
true
, иначе -false
:Примерval a = -5
val b = 1
(a < b): return true
(b < a): return false<=
- Оператор "МЕНЬШЕ, ЛИБО РАВНО".
- Если одно значение меньше, либо равно второму - возвращает
true
, иначе -false
:Примерval a = -4
val b = 1
val c = -1
(a <= b): return true
(a <= c): return true
(b <= a): return false
&&
- Оператор "И".
- Если оба условия вернули
true
- возвращаетtrue
, иначе, если одно из условий вернулоfalse
- возвращаетfalse
:Примерval a = 10 > 4
val b = 3 < 5
val c = -1 > 5
(a && b): return true
(a && c): return false||
- Оператор "ИЛИ".
- Если одно из условий вернуло
true
- возвращаетtrue
, иначе если все условия вернулиfalse
- возвращаетfalse
:Примерval a = 10 == 10
val b = 6 > 19
val c = -3 != -3
(a || b): return true
(b || c): reutrn false
Логические операторы
Есть специальные методы, которые проверяют условия, и в зависимости что эти условия вернули - делает определённые действия.
Шаблон
if(<условие>: return Boolean) {
<Если условие вернуло true>
} else if(<другое условие>: return Boolean) {
<Если условие выше вернуло false, а другое условие вернуло true>
} else {
<Если все выше условия вернули false>
}
Объяснение:
if
- Это специальный оператор, где в параметрах записывается условие, которое обязано вернуть тип данныхBoolean
. И если параметр метода будетtrue
- то дальше код будет выполняться из тела этого же метода.else if
- то же самое что иif
, но используется если приif
условие вернулоfalse
. Их может быть несколько.else
- Если все выше условия в операторах вернулиfalse
, то запускается этот оператор.
Упрощение кода
Если у теле условия (if
, else if
, else
) будет делаться всего 1 действие, то не обязательно
использовать фигурные скобки {}
.
Было
if(a > b) {
print("yes")
} else {
print("no")
}
Стало
if(a > b)
print("yes")
else
print("no")
/* или же можно ещё меньше */
if(a > b) print("yes")
else print("no")
Было
if(a > b) {
print("yes")
} else {
print("no")
}
Стало
if(a > b)
print("yes")
else
print("no")
/* или же можно ещё меньше */
if(a > b) print("yes")
else print("no")
Теперь разберём пример.
val r = Random.nextInt(-5, 5)
if(r > 0)
print("Число больше 0 точно.")
else if(r < 0)
print("Число меньше 0 точно.")
else
print("Число равно 0 точно.")
И что у нас здесь происходит:
- Если условие вернуло
true
(т.е. полученное число БОЛЬШЕ 0) - в консоль выводится сообщение:Число больше 0 точно.
- Если первое условие вернуло
false
, но следующее вернулоtrue
(т.е. полученное число МЕНЬШЕ 0) - в консоль выводится сообщение:Число меньше 0 точно.
- Если Все выше условия вернули
false
(т.е. полученное число равно 0) - в консоль выводится сообщение:Число равно 0 точно.
Циклы
Есть 3 вида цикла:
while
- Цикл работает до тех пор, пока условие возвращаетtrue
.while(<условие>: return true) {
<Цикличные действия>
}for
- Цикл работает по указанному диапазону.for(<диапазон>) {
<Цикличные действия>
}forEach
- Работает по диапазону. Чаще всего используется для работы со списками.<list>.forEach { <arg> ->
<Цикличные действия>
}
While
Пример
var i = 0
while(i < 10) {
println("i: $i")
i++
}
print("Цикл закончился.")
В консоли
i: 0
i: 1
i: 2
i: 3
i: 4
i: 5
i: 6
i: 7
i: 8
i: 9
Цикл закончился.
Разберём:
- Создали динамическуию переменную
i
со значением0
.- Создали цикл, который будет работать, пока значение в переменной
i
будет МЕНЬШЕ10
.- В цикле:
- В ыводим в консоль сообщение:
i: $i
где за место$i
будет вставлятся значение переменной i.- Повызваем значение переменной
i
на+1
.- После окончания цикла, в консоль выводится сообщение:
Цикл закончился.
For
Пример
for(i in 0..10) {
println("i: $i")
}
print("Цикл закончился.")
В консоли
i: 0
i: 1
i: 2
i: 3
i: 4
i: 5
i: 6
i: 7
i: 8
i: 9
i: 10
Цикл закончился.
Разберёмся:
- Создали цикл
for
который работает в диапазоне от0
по10
.- В цикле:
- Выводим в консоль сообщение:
i: $i
, где за место$i
будет вставлятся значение переменной i цикла.- После окончания цикла, в консоль выводится сообщение:
Цикл закончился.
ForEach
Пример
val list = arrayOf(
"Катя", "Егор", "Женя", "Юля"
)
list.forEach { name ->
val old = Random.nextInt(14, 20)
println("$name - $old лет")
}
В консоли
Катя - 16 лет
Егор - 14 лет
Женя - 15 лет
Юля - 17 лет
Объяснение:
- Создаём список.
- Создаём цикл, который работает со списком.
- В цикле:
forEach
проходится по списку и получает значение по индексу, который можно получить черезname
.- Выводим в консоль сообщение:
$name - $old лет
, где за месте$name
- вставляется строка со списка по индексу, а за место$old
- вставляется рандомное число от14
до20
.