Skip to main content
Version: Legacy

Логика и Циклы в 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
Цикл закончился.

Разберём:

  1. Создали динамическуию переменную i со значением 0.
  2. Создали цикл, который будет работать, пока значение в переменной i будет МЕНЬШЕ 10.
  3. В цикле:
    • Выводим в консоль сообщение: i: $i где за место $i будет вставлятся значение переменной i.
    • Повызваем значение переменной i на +1.
  4. После окончания цикла, в консоль выводится сообщение: Цикл закончился.

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
Цикл закончился.

Разберёмся:

  1. Создали цикл for который работает в диапазоне от 0 по 10.
  2. В цикле:
    • Выводим в консоль сообщение: i: $i, где за место $i будет вставлятся значение переменной i цикла.
  3. После окончания цикла, в консоль выводится сообщение: Цикл закончился.

ForEach

Пример
val list = arrayOf(
"Катя", "Егор", "Женя", "Юля"
)

list.forEach { name ->
val old = Random.nextInt(14, 20)
println("$name - $old лет")
}
В консоли
Катя - 16 лет
Егор - 14 лет
Женя - 15 лет
Юля - 17 лет

Объяснение:

  1. Создаём список.
  2. Создаём цикл, который работает со списком.
  3. В цикле:
    • forEach проходится по списку и получает значение по индексу, который можно получить через name.
    • Выводим в консоль сообщение: $name - $old лет, где за месте $name - вставляется строка со списка по индексу, а за место $old - вставляется рандомное число от 14 до 20.