Введение: что спрашивают про Kotlin на собеседованиях
«Что вы знаете о Kotlin?» — безобидный на вид вопрос, который я задаю в начале почти каждого Android-собеседования. И он хорошо отсеивает: кто-то рассказывает про фичи языка, а кто-то отвечает «ну, это язык для Android».
Парадокс в том, что Kotlin — главный язык индустрии, а ответы на вопросы о нём часто самые слабые во всём собеседовании. Кандидаты пишут на нём каждый день, но не могут объяснить, что это за язык, как он устроен и почему Android выбрал именно его. В этой статье соберу базу: что такое Kotlin, кто его делает, чем он отличается от Java и что компилируется на самом деле. Все факты — из официальной документации.
Что такое Kotlin и откуда он взялся
Начнём с официального определения: Kotlin — это open-source язык со статической типизацией, который работает на JVM, Android, JavaScript, Wasm и Native. Разрабатывает его команда JetBrains — той самой компании, что делает IntelliJ IDEA и Android Studio.
Короткая история, которую стоит знать:
- Проект начался в 2010 году и с самого начала был open-source.
- Первый стабильный релиз — Kotlin 1.0 в феврале 2016 года.
- Код распространяется под лицензией Apache 2.0 — язык бесплатный.
- Сейчас Kotlin — first-class язык для Android: официальная поддержка от Google, встроенная в Android Studio.
На момент написания статьи актуальная стабильная версия — серия 2.x, и это важно, потому что Kotlin 2.0 стал точкой отсчёта для нового компилятора K2 (о нём ниже).
Две вещи, которые стоит запомнить
Kotlin — статически типизированный язык от JetBrains с открытым исходным кодом. Первый релиз 1.0 вышел в феврале 2016 года, а сейчас это официально поддерживаемый язык для Android.
Почему статическая типизация — это аргумент для собеседования? Потому что она переносит часть ошибок с рантайма на этап компиляции: тип каждой переменной известен до запуска, и компилятор проверяет совместимость. Меньше сюрпризов в продакшене — проще жить.
Почему Kotlin: null-safety и не только
Главный аргумент в пользу Kotlin — null-safety: возможность явно указать в типе, может ли переменная быть null. В Java любой ссылочный тип может оказаться null, и вы узнаёте об этом в рантайме — NullPointerException. Kotlin встраивает эту проверку в систему типов, и большинство NPE ловятся ещё при компиляции.
fun main() {
val a: String = "abc"
// a = null — ошибка компиляции: тип String не nullable
var b: String? = "abc"
b = null // а вот так можно
val length = b?.length ?: 0
println(length) // 0
}По документации, в Kotlin NPE может возникнуть только в ограниченном числе случаев: явный throw NullPointerException(), оператор !!, ошибки инициализации и проблемы при интеропе с Java. Для всего остального есть ?., ?: и умные приведения типов.
Чем ещё Kotlin хорош — коротко, потому что это тоже любят спрашивать:
- Лаконичность. По оценке JetBrains, Kotlin примерно на 40% сокращает количество строк кода по сравнению с Java.
- Data class.
data class User(val id: Int, val name: String)— equals, hashCode, toString и copy генерируются автоматически. - Extension functions — добавляют методы классам снаружи, без наследования.
- Интероп с Java. Kotlin на 100% совместим с Java-кодом в обе стороны — существующий Java-проект можно переводить постепенно.
Меньше кода
По официальной оценке JetBrains, Kotlin сокращает количество строк кода примерно на 40% по сравнению с Java. Это один из главных аргументов «за», который стоит держать в голове.
data class User(val id: Int, val name: String)
fun main() {
val first = User(1, "Anna")
val copy = first.copy(name = "Ann")
println(first == copy) // false: id совпадает, name — нет
}Во что компилируется Kotlin
Теперь о том, как язык работает «под капотом». Kotlin — не только про Android: в зависимости от цели компиляции он превращается в разные артефакты:
- JVM — в байткод, совместимый с Java. Это и есть классический путь для Android и серверов.
- JavaScript — транспилируется в код, совместимый с ES5.1.
- Native — в машинный код через LLVM, без виртуальной машины (для iOS, десктопа, встраиваемых систем).
- Wasm — в WebAssembly для браузеров и не только.
Этот список — фундамент ответа на вопрос «почему Kotlin называют мультиплатформенным». Один язык — разные платформы, общая бизнес-логика и свои реализации под каждую ОС. Так работает Kotlin Multiplatform.
Отдельная важная тема — компилятор K2. Он был в разработке несколько лет и стал стабильным по умолчанию в Kotlin 2.0 (релиз 21 мая 2024 года). Новый компилятор ускоряет сборку и открывает дорогу новым фичам языка — если кандидат упоминает это на собеседовании, это заметный плюс.
Частая ошибка: «Kotlin компилируется в Android-байткод» или «Kotlin работает только в Android». Нет: Kotlin компилируется в JVM-байткод, JavaScript, машинный код и Wasm, а Android — лишь одно из применений JVM-цели.
Kotlin на собеседовании
Что чаще всего спрашивают про Kotlin и где кандидаты спотыкаются — по моему опыту проведения собеседований.
- Null-safety. Уметь объяснить разницу между
StringиString?, знать?.,?:,!!и почему!!— запах кода. Это вопрос №1. - val и var.
val— неизменяемая ссылка, а не «константа»: сам объект может быть изменяемым.val list = mutableListOf<Int>()прекрасно компилируется. - Data class vs обычный класс. Ожидают, что назовёте сгенерированные методы: equals, hashCode, toString, copy, componentN.
- Extension functions. Это не «добавление методов в класс» в рантайме — это статические функции с синтаксисом вызова как у метода.
- Интероп с Java. Kotlin на 100% совместим с Java-кодом в обе стороны; platform types — источник неожиданных NPE.
- Платформы. Назвать JVM, JS, Native и Wasm — и упомянуть, что Android использует JVM-цель.
Формула сильного ответа
«Kotlin — статически типизированный open-source язык от JetBrains, first-class для Android. Ключевое отличие от Java — null-safety в системе типов, примерно 40% меньше кода и полная совместимость с Java. Компилируется в JVM-байткод, JS, Native и Wasm». Три предложения — и тема закрыта.
Важный нюанс: не пытайтесь выучить «правильные ответы» списком. Интервьюер всегда копает глубже — например, спрашивает, как extension functions работают под капотом или почему val не делает коллекцию неизменяемой. На собеседованиях сильнее всего выделяются кандидаты, которые понимают механику, а не формулировки.
Именно такие пробелы — «пишу на Kotlin каждый день, а объяснить не могу» — я вижу у разработчиков с опытом 1–2 года, которые готовятся к переходу на middle. Я провожу технические собеседования и помогаю такие пробелы закрывать: диагностирую уровень, разбираю темы и тренирую ответы.
Нужна помощь с переходом на middle?
Бесплатная диагностика: разберу ваши пробелы в Kotlin, корутинах и архитектуре и составлю план роста за 30–40 минут. Без обязательств — если менторство вам не подойдёт, честно скажу.
Итоги
Kotlin — тема, которую невозможно обойти стороной: это основной язык Android-индустрии. Три тезиса для собеседования:
- Происхождение: open-source статически типизированный язык от JetBrains, первый стабильный релиз — февраль 2016 года, сейчас официально поддерживается для Android.
- Главные фичи: null-safety в системе типов, примерно на 40% меньше кода, чем в Java, полный интероп с Java, data class и extension functions.
- Компиляция: JVM-байткод, JavaScript, Native через LLVM и Wasm; с Kotlin 2.0 стабилен новый компилятор K2.
Главное, что нужно запомнить
Kotlin — это не «язык для Android», а мультиплатформенный язык от JetBrains, который сокращает код на ~40% и ловит NPE на этапе компиляции. Android — его самое известное применение, но не единственное.
Если чувствуете, что в Kotlin есть дыры, а на собеседование уже скоро — не нужно перечитывать всё подряд. Напишите в Telegram, разберём вашу ситуацию и составим план подготовки под ваш уровень.