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

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: модный терминал маковода

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

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

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

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

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

easy
Что такое Git и как с ним работать
Что такое Git и как с ним работать

Зачем нужен контроль версий и что делать, если ваши друзья его используют

easy
Собираем макропад для повышения эффективности работы
Собираем макропад для повышения эффективности работы

Для игр тоже подойдёт

medium
Что такое цепи Маркова и как они работают
Что такое цепи Маркова и как они работают

Простой способ сгенерировать много текста, который будет похож на настоящий.

easy
Типизация и аннотации типов данных в Python
Типизация и аннотации типов данных в Python

Можно без неё, но с ней лучше

easy
Как устроен тест по выбору языка программирования
Как устроен тест по выбору языка программирования

Добавляем вопросы на страницу прямо во время теста

medium
Кто такой фулстек-разработчик и что он умеет
Кто такой фулстек-разработчик и что он умеет

Разработчик, который умеет всё, но понемногу

easy
easy