10 главных конструкций языка Kotlin

10 главных конструкций языка Kotlin

Почти как Java, но есть отличия.

Чтобы быстро начать программировать на языке, достаточно знать несколько основных конструкций и общих правил написания кода. Со временем вы освоите все нюансы, а на старте можно использовать что-то попроще.

Если вы не знаете, зачем нужен Kotlin и что на нём программируют, почитайте нашу статью про Kotlin. А если знаете — вот вам краткий справочник по основам языка.

Комментарии


Переменные


Ввод и вывод


Присваивание и сравнение


Условный оператор if


Оператор множественного выбора when


Циклы


Функции


Классы


Объекты

👉 В Kotlin будет много конструкций, похожих на Java. Это нормально, потому что Kotlin работает тоже поверх виртуальной машины JVM, как и Java.

Точка с запятой в Котлине не нужна.

Комментарии

Всё как обычно — есть однострочные и многострочные комментарии:

// Это однострочный комментарий
// Для каждой строки нужно добавлять его отдельно
/* А это — многострочный
его можно сделать любой длины,
если в начале и в конце поставить нужные символы */

Многие программисты ругают Kotlin за то, что ключевые слова для переменной и константы отличаются всего на одну букву:

val — объявляет константу

var — объявляет переменную

Из-за этого легко ошибиться и сделать константу вместо переменной и наоборот.

val a: Int = 1 // можно сразу указать тип константы
val b = 1   // а можно не указывать, тогда тип назначится автоматически

val c: Int  // когда константа сразу не получает значение, нужно обязательно указать её тип
c = 1       // этот тип будет использоваться при объявлении константы

var x = 5 // здесь тип тоже назначается автоматически
var y: Int  // указываем вручную, что у нас переменная целочисленного типа

Ввод и вывод

Чтобы ввести что-то с клавиатуры, нам нужна переменная, где будет храниться результат ввода и команда readLine(). Эта команда ждёт, когда пользователь введёт любые данные и нажмёт Enter. После этого всё, что ввёл пользователь, отправляется в ту переменную.

Для вывода используются команды print() и println() — первая оставляет курсор на той же строке, а вторая после вывода переводит курсор на новую строку.

Чтобы вывести значение переменной в команде вывода, перед переменной ставят знак доллара:

var s // переменная, куда мы отправим результат ввода
print("Напишите что-нибудь: ") // выводим фразу и оставляем курсор на той же строке
s = readLine() // читаем данные с клавиатуры
println("Вот что вы только что ввели: $s") // выводим нашу фразу и значение переменной

Присваивание и сравнение

Всё так же, как в Java, но без точек с запятой:

// это присваивание
x = 10
// а это — сравнение x и 10
// результат сравнения отправляется в переменную b
var bol: Boolean
b = (x == 10)

Условный оператор if

Работает как обычно: сначала проверяется условие, и если оно истинно — выполняется код, который идёт после условия. Если результат проверки ложный — выполняется код, написанный после else, или не выполняется ничего, если такого блока в условии нет. Условие пишется в скобках, фигурные скобки можно не писать, если нужно выполнить только одну команду.

if (a > b) // проверяем условие
    s = a + 10 // одна команда, поэтому можно без фигурных скобок
  else { // если условие ложно, то делаем то, что написано в этом блоке
  	s = a - 10 // раз больше одной команды, то ставим фигурные скобки
  	b = b - 5
  }

Оператор множественного выбора when

Аналог классического Case или Switch из других языков программирования. Команда смотрит на значение переменной, которое к ней поступило, и сравнивает это значение со своим списком вариантов. Если есть совпадение — выполняется нужная команда.

var answer = readline() // получаем ответ от пользователя
when(answer){ // проверяем ответ по списку
    "Да" -> println("Правильный ответ")
    "Нет" -> {
    	 println("Неправильный ответ")
    	 count -= 1
    	}
    "Не знаю" -> count -= 2
    else -> println("Ответ не распознан, повторите снова")

}

Циклы

Проще всего работать с циклом for: достаточно указать имя переменной цикла и диапазон, в котором она будет меняться:

for (i in 1..6) {
    print("$i ")
}

При желании можно указать шаг цикла внутри диапазона (по умолчанию он равен единице):

for (i in 1..6 step 2) {
    print("$i ") // на экране появятся числа 1, 3 и 5
}

Циклы с предусловием и с постусловием выглядят и работают как в обычном Java:

sum = 1
do { // начало цикла
    sum = sum + (sum + 1) // тело цикла
} while (sum < 1) // проверка условия

// и то же самое с циклом while
sum = 1
while (sum < 1) { // проверка условия
    sum = sum + (sum + 1) // тело цикла
}

Функции

У функций в Kotlin полная свобода:

  • можно возвращать значение, а можно и не возвращать;
  • функции могут иметь свой тип, а могут и не иметь;
  • функции могут работать как переменные;
  • функции можно перегружать почти как операторы в C++.

👉 А ещё в Kotlin, как и в Java, каждая программа состоит из функций и каждая команда должна быть внутри какой-то функции. Основная функция программы называется main.

Самое простое объявление и использование функций в Kotlin выглядит так:

fun printHello() { //объявляем новую функцию
    println("Привет, это журнал Код!") // выводим приветствие
}
 
fun main() { // основная функция в каждой программе 
    printHello() // Вызываем нашу новую функцию
}

Классы

Классы в Котлине поддерживают полноценные конструкторы и инициализации, но для старта достаточно объявить имя класса и его содержимое:

class Client(val name: String, var bonus: Int, val sity: String) { //объявляем класс с тремя свойствами
    fun printBonus() { // добавляем функцию внутрь класса
    	println("У клиента $bonus бонусных баллов")
    }
}

Объекты

Как и в большинстве ООП-языков, для создания нового объекта достаточно указать класс, от которого произойдёт объект. После этого с объектом можно работать по всем правилам объектно ориентированного программирования:

class Client(val name: String, var bonus: Int, val sity: String) { //объявляем класс с тремя свойствами
fun printBonus() { // добавляем функцию внутрь класса
    	println("У клиента $bonus бонусных баллов")
    }
}

var ivanov = Client("Сергей Иванов", 500, "Санкт-Петербург") // создаём новый объект с покупателем
println(ivanov.name) // выводим его имя
println(ivanov.sity) // и его город
ivanov.bonus() // используем встроенную в класс функцию, чтобы узнать количество бонусных баллов

Текст:

Михаил Полянин

Редактор:

Максим Ильяхов

Художник:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Олег Вешкурцев

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства и компенсация, если вы пойдёте работать в «Яндекс».
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
iTerm2: модный терминал маковода
iTerm2: модный терминал маковода

Как установить и начать пользоваться.

Владимир Олохтонов о работе старшего разработчика в Авито
Владимир Олохтонов о работе старшего разработчика в Авито

Путь от монтажника локальных сетей до инженера машинного обучения.

Scala
Зачем нужен Scala?

Разбираем, почему это не самый популярный язык.

Что такое Kotlin?
Что такое Kotlin

И зачем он андроид-разработчику.

Sublime Text
Почему настоящие мастера пишут всё в Sublime Text

Вообще всё.

Почему Ruby — особенный язык

Потому что он прост как JavaScript и многогранен как С++.

Haskell — ленивый язык программирования
Haskell — ленивый язык программирования

Он сам решает, что и когда нужно посчитать.

MySQL — царица баз
MySQL — царица баз

Она сложная, но с ней всё просто.

Что такое «задача коммивояжёра»
Что такое «задача коммивояжёра»

Благодаря ей у нас есть навигаторы и системы принятия решений.

NFT — новые модные токены. Зачем они нужны и не развод ли это?
NFT — новые модные токены. Зачем они нужны и не развод ли это?

Объясняем на Аллегровой.

Двоичный калькулятор из бусин и палок
Двоичный калькулятор из бусин и палок

Выглядит странно, но при этом всё работает

Решение матричных уравнений
Решение матричных уравнений

Финальная глава саги.

10 главных конструкций языка Swift
10 главных конструкций языка Swift

Быстрый гайд по языку.

easy