Что такое Kotlin и почему его выбрал Google

Kotlin — современный язык на JVM, который с 2019 года официально считается приоритетным для Android-разработки, а с версии 2.0 работает на новом компиляторе K2.
Суть: Kotlin даёт лаконичный синтаксис, защиту от null на уровне типов и полную совместимость с Java, поэтому вы пишете меньше кода и реже ловите ошибки времени выполнения.

Если вы хоть раз видели старый Android-код на Java, вы помните многословность: геттеры, сеттеры, проверки на null через if, анонимные классы на десять строк ради одного клика по кнопке. Kotlin появился как ответ на эту усталость. Его придумала компания JetBrains — та самая, что делает IntelliJ IDEA и Android Studio, — и язык с самого начала проектировался прагматично: убрать лишний шум, оставить выразительность, не ломая совместимость с гигантским миром Java-библиотек.

В 2017 году Google объявил Kotlin официально поддерживаемым языком для Android, а в 2019-м — приоритетным (Kotlin-first). Это значит, что новые библиотеки Jetpack, документация и примеры пишутся в первую очередь на Kotlin. Сегодня, в эпоху Kotlin 2.x, язык вышел далеко за пределы Android: на нём пишут бэкенды, мультиплатформенные приложения и даже фронтенд. Но именно Android остаётся его главной витриной, и для джуниора это прямой путь к коммерческой разработке.

Чем Kotlin отличается от Java

Первое, что бросается в глаза, — отсутствие лишних слов. Точки с запятой не нужны, тип переменной чаще всего выводится автоматически, а класс-контейнер данных описывается одной строкой. Сравните объявление в Java на пятнадцать строк с data class на одну — это не косметика, а реальное сокращение объёма кода и поверхности для ошибок.

Второе и главное — null-безопасность. В Java любая ссылка может оказаться null, и NullPointerException годами оставался ошибкой номер один. В Kotlin тип String в принципе не может быть null; чтобы разрешить отсутствие значения, нужно явно написать String?. Компилятор не даст обратиться к возможно-null значению без проверки. Целый класс аварий просто исчезает.

// Java-стиль мышления, но на Kotlin
val name: String = "Аня"      // не может быть null
val nickname: String? = null   // может быть null, тип помечен ?

// println(nickname.length)    // ОШИБКА КОМПИЛЯЦИИ
println(nickname?.length)      // безопасно: вернёт null
println(nickname?.length ?: 0) // подстановка значения по умолчанию

Третье — функции высшего порядка и лямбды как часть языка, а не громоздкие анонимные классы. Обработчик клика, который в Java занимал пять строк, в Kotlin умещается в одну.

Как работает под капотом

Kotlin компилируется в тот же байт-код JVM, что и Java. Компилятор переводит ваш .kt-файл в .class-файлы, которые исполняет виртуальная машина (на Android — её аналог ART). Поэтому Kotlin и Java свободно вызывают друг друга: вы можете подключить любую Java-библиотеку и пользоваться ей как родной.

С версии 2.0 за компиляцию отвечает новый фронтенд — компилятор K2. Он переписан с нуля, лучше понимает структуру кода, выдаёт более точные сообщения об ошибках и компилирует заметно быстрее (в некоторых Android-проектах инкрементальная сборка ускорилась до двух раз). Для вас как для новичка важно одно: K2 — это умолчание в актуальной Android Studio, и весь современный материал ориентирован на него.

  Ваш код (.kt)
        |
        v
  Компилятор K2  -->  Байт-код JVM (.class)
        |
        v
   Среда ART на устройстве  -->  Запуск приложения

Частые ошибки

Думать на Java и писать на Kotlin. Новички тащат привычки: ручные геттеры, проверки if (x != null) повсюду, объявление переменных через var без нужды. Kotlin поощряет иммутабельность: по умолчанию выбирайте val (неизменяемая ссылка) и переходите на var только там, где значение действительно меняется.

Игнорировать предупреждения о null. Если компилятор требует ? или !!, это не придирка, а защита. Оператор !! («я уверен, что не null») снимает проверку, но возвращает риск NullPointerException — пользуйтесь им крайне редко.

Best practices

  • По умолчанию val, и только при необходимости var — это делает код предсказуемее.
  • Доверяйте выводу типов, но для публичных функций указывайте тип возврата явно — так читается контракт.
  • Не используйте !! как способ «заткнуть» компилятор; почти всегда есть безопасная альтернатива через ?. или ?:.
  • Сразу привыкайте к актуальной версии Kotlin 2.x и компилятору K2 — старые туториалы на Kotlin 1.x могут показывать устаревшие приёмы.

Аналогию с null-безопасностью удобно прочувствовать на простой логике. Запустите врезку ниже: она моделирует то, что Kotlin делает на уровне типов — безопасный доступ к возможно-отсутствующему значению.

# Аналог null-безопасного доступа из Kotlin: ?. и ?:
def safe_length(value):
    # моделируем nickname?.length ?: 0
    return len(value) if value is not None else 0

names = ["Аня", None, "Борис", None]
for n in names:
    print(repr(n), '->', safe_length(n))

Попробуй сам ▶ — измените список, добавьте свои значения и пустые строки, посмотрите, как ведёт себя «безопасная длина». В Kotlin за эту логику отвечает сам компилятор, и ошибиться сложнее.

Итог: Kotlin — это прагматичный, безопасный и лаконичный язык, который Google выбрал основным для Android не случайно. Меньше кода, меньше ошибок, полная совместимость с Java и быстрый компилятор K2 делают его идеальной точкой входа в мобильную разработку. В следующих уроках мы разберём базовый синтаксис и постепенно дойдём до полноценных экранов на Jetpack Compose.

Проверьте себя
1. Что означает статус Kotlin-first для Android?
AKotlin полностью заменил Java и Java больше не работает на Android
BНовые библиотеки, документация и примеры Google создаёт в первую очередь на Kotlin
CKotlin компилируется быстрее любого другого языка в мире
DНа Android можно писать только на Kotlin
2. Почему в Kotlin резко падает число ошибок NullPointerException?
AKotlin запрещает использовать переменные
BКомпилятор автоматически заменяет все null на пустые строки
CNull-безопасность встроена в систему типов: обычный тип не может быть null, а nullable помечается знаком ?
DKotlin не поддерживает значение null в принципе