Kotlin: что это, где применяется и как освоить
Kotlin — язык программирования от JetBrains со статической типизацией, который работает на виртуальной машине Java и свободно вызывает Java-код. На нём пишут Android-приложения, серверные сервисы на Spring и Ktor, автотесты, сборочные скрипты Gradle и общий код для Android и iOS через Kotlin Multiplatform. От Java его отличают короткий синтаксис, разделение типов на допускающие и не допускающие null, data-классы, функции-расширения и корутины для асинхронной работы. Освоение идёт от синтаксиса и null-безопасности к коллекциям, корутинам и одной прикладной области.
Содержание

Чаще всего за Kotlin берутся три человека: Java-разработчик, которому достался сервис, где новые модули уже пишут на Kotlin; тестировщик-автоматизатор, которому нужно читать код Android-приложения и писать к нему UI-тесты; студент, который хочет в мобильную разработку, но не готов запирать себя в одной платформе. Работу Android-команды описывает статья о профессии Android-разработчика на сайте, а здесь речь о самом языке и о том, как проверить, что вы им владеете.
Четыре особенности, которые видно с первого дня
Главное отличие Kotlin — null-безопасность. Тип String гарантирует, что в переменной лежит строка, а String? разрешает и null. Компилятор не даст вызвать name.length у переменной типа String?: придётся написать безопасный вызов name?.length или задать значение по умолчанию через оператор «элвис» — name?.length ?: 0. Ошибка, которая в Java проявилась бы исключением NullPointerException у пользователя, здесь обнаруживается при сборке.
Вторая особенность — data-классы. Строка data class Order(val id: Long, val total: Int) заменяет десятки строк Java: компилятор сам создаёт equals, hashCode, toString и метод copy, который возвращает изменённую копию объекта. Такие классы удобны для ответов сервера и состояния экрана.
Третья — функции-расширения. Можно добавить метод к чужому классу, не наследуясь от него: после объявления fun String.isPhone(): Boolean проверка выглядит как input.isPhone(). Сам класс при этом не меняется, а закрытые поля расширению недоступны.
Четвёртая — корутины. Функция с модификатором suspend может приостановиться, пока ждёт ответа сети, и не занимает при этом поток. Два запроса запускаются параллельно через async, результат собирается вызовом await, а код читается сверху вниз, без цепочек обратных вызовов.
Где пишут на Kotlin кроме Android
С Android язык связан сильнее всего. На Google I/O 2019 компания объявила подход Kotlin-first: новые библиотеки Jetpack, примеры и обучающие материалы создаются в первую очередь для Kotlin. По таблице поддержки на developer.android.com Jetpack Compose, современный набор для построения интерфейса, из Java не поддерживается: экраны на нём пишут только на Kotlin.
На сервере Kotlin работает со Spring Boot так же, как Java, а Ktor — фреймворк самих JetBrains — изначально построен на корутинах. Технологию Kotlin Multiplatform в ноябре 2023 года, с версией 1.9.20, объявили стабильной: в общий модуль выносят сетевой слой, хранение данных и расчёты, а экраны для Android и iOS остаются своими. Есть и незаметное применение: начиная с Android Studio Giraffe новые проекты по умолчанию описывают сборку в файлах build.gradle.kts, то есть на Kotlin, так что читать его приходится даже тем, кто пишет на другом языке.
Переход с Java: где null-безопасность заканчивается
Гарантии Kotlin распространяются только на код, который компилятор понимает. Любая ссылка в Java может оказаться null, поэтому значения из Java-библиотек Kotlin получает как платформенные типы — в подсказках среды разработки они выглядят как String!. Для них проверки ослаблены до уровня Java: вызов item.substring(1) компилируется, а при null программа упадёт уже во время работы — именно на стыке с Java-кодом.
Закрывают этот стык аннотациями в Java-коде. Kotlin понимает несколько их наборов, в том числе JSpecify — общий стандарт с @Nullable, @NonNull и @NullMarked. С версии 2.1.0, вышедшей 27 ноября 2024 года, расхождения с аннотациями JSpecify компилятор по умолчанию считает ошибками, а не предупреждениями. Через год, в ноябре 2025-го, вышли Spring Framework 7 и Spring Boot 4: их исходный код размечен аннотациями JSpecify, и API Spring для Kotlin больше не возвращают платформенные типы.
У этого улучшения есть практическое следствие. В примечаниях к выпуску Spring Framework 7.0 минимальной версией Kotlin названа 2.2 и прямо сказано, что допустимость null в Kotlin-API Spring могла измениться и Kotlin-проектам придётся менять код — например, при работе с расширениями JdbcOperations и RestOperations. Сервис, который годами собирался на Spring Boot 3, после обновления может не собраться в местах, где код молча полагался на непустой результат. Править такие места через !! — значит вернуть исключение во время работы. Правильнее обработать null явно: вернуть ответ 404, подставить значение по умолчанию или изменить тип на допускающий null.
Порядок освоения
Последовательность ниже рассчитана на человека, который уже написал несколько программ на любом языке. Сначала нужно привыкнуть к системе типов и null-безопасности, иначе каждый следующий шаг будет спотыкаться о подсказки компилятора. Коллекции идут раньше корутин, потому что асинхронный код почти всегда обрабатывает списки, а прикладную область разумно выбирать последней, когда язык уже не мешает думать о задаче.
- Синтаксис,
valиvar, типыStringиString?, операторы?.,?:, условияwhen. - Классы, data-классы, sealed-классы для набора состояний, интерфейсы, функции-расширения.
- Коллекции и функции высшего порядка:
map,filter,groupBy,fold; разница междуListиMutableList. - Gradle с файлами
build.gradle.kts, тесты на JUnit 5 или Kotest, Git. - Корутины:
suspend,launch,async, области видимости и отмена; затем потоки данныхFlow. - Одна прикладная область: Android с Compose, сервер на Ktor или Spring Boot, UI-тесты на Kaspresso.
Первые три шага удобно пройти бесплатно — в онлайн-песочнице Kotlin Playground и официальном туре по языку на kotlinlang.org. Старшеклассникам проще двигаться с преподавателем и группой: на курсе «Разработчик мобильных приложений на Kotlin» онлайн-школы CODDY для подростков 14–18 лет за учебный год проходят 72 часа занятий — синтаксис, классы и функции, затем Android Studio. Занимаются онлайн индивидуально или в группах до восьми человек, итоговый проект — прототип интернет-магазина.
Учебный пример: утренняя сводка из двух источников
Учебная ситуация. Нужна консольная программа, которая утром показывает погоду и ближайшую электричку. Данные приходят из двух сервисов, и любой из них может не ответить.
Сначала опишите данные: data class Weather(val temp: Int, val note: String?) и data class Train(val time: String, val platform: Int?). Поле note допускает null, потому что примечания бывает нет, — и компилятор заставит это учесть при выводе. Результат запроса оформите sealed-классом Result с вариантами Ok и Failed — тогда when проверит, что обработаны оба случая.
Затем напишите две suspend-функции, которые имитируют запросы с задержкой delay(800), и вызовите их внутри coroutineScope через async. Если запросы идут друг за другом, сводка появится через 1,6 секунды, если параллельно — примерно через 0,8. Проверьте это через measureTimeMillis. Добавьте функцию-расширение Weather.format() для вывода и тесты: на отсутствие примечания, на упавший второй сервис и на отмену по тайм-ауту через withTimeout.
Дальше пример растёт вместе с вами: для Android логика переезжает во ViewModel и экран Compose, для сервера сводка отдаётся по HTTP через Ktor, для Kotlin Multiplatform модели и запросы уходят в общий модуль. Тем, кто базу языка уже прошёл и растёт в Android-разработке, подойдёт курс «Мидл Android-разработчик» Яндекс Практикума: он рассчитан на тех, кто уже пишет на Kotlin, длится пять месяцев при нагрузке от 15 часов в неделю, в программе — корутины, Flow и StateFlow, тесты на JUnit, MockK и Kaspresso, код-ревью от практикующих разработчиков.
Упражнения, ошибки и самопроверка
Для тренировки годятся задачи, где ответ легко проверить: разбор CSV-файла в список data-классов с итогами через groupBy, загрузка трёх страниц параллельно с общим тайм-аутом. Java-разработчику полезно сконвертировать старый класс встроенным конвертером IntelliJ IDEA и затем убрать из результата лишние !!.
Ошибки новичков обычно повторяются. Знак !! ставят там, где компилятор жалуется, и получают то же исключение, что было в Java. Корутины запускают через GlobalScope, и они продолжают работать после закрытия экрана или запроса. Внутри корутины оставляют блокирующий Thread.sleep, и параллельность пропадает.
Проверить себя можно по трём признакам. В коде нет !! там, где вы не можете объяснить, почему значение точно есть. Вы рассказываете, что произойдёт с запущенными корутинами при отмене родительской области. Проект собирается и проходит тесты командой ./gradlew test на чужом компьютере. Взрослым новичкам, которые учатся в своём темпе, подойдёт комплект курсов Merion Academy «Android-разработчик с нуля» и «iOS-разработчик с нуля»: в Android-части Kotlin изучают на классическом Android с Activity и Fragment, асинхронность — на корутинах и Flow. Занятия асинхронные, 2–5 часов в неделю.
Как Kotlin влияет на доход
Сам язык редко определяет зарплату: в вакансиях он идёт вместе с Android SDK, Spring или инструментами автотестов, зато расширяет круг задач. Java-разработчик может брать модули, где новый код пишут только на Kotlin; тестировщик — автоматизировать проверки мобильного приложения; бэкенд-разработчик — участвовать в общем модуле Kotlin Multiplatform.
Ориентир по фактическим зарплатам даёт калькулятор Хабр Карьеры по навыку Kotlin: 1 октября 2026 года он показывал 342 000 ₽ в месяц по 434 анкетам — без фильтра по городу и уровню, то есть вместе с ведущими и старшими разработчиками. Это зарплаты, которые указали сами специалисты, а не предложения в вакансиях; период расчёта на открытой странице не указан. Начинающим полезнее смотреть вакансии своего города с фильтром по опыту: у младших разработчиков вилка заметно ниже.
Как выбрать обучение
Сначала решите, зачем вам Kotlin — для Android, сервера, автотестов или как первый язык: от этого зависит, что должно быть в программе после основ. Проверьте, под какую версию написаны материалы (свежая на сентябрь 2026 года — 2.4.20), есть ли блок о корутинах с отменой и обработкой ошибок, пишут ли на курсе тесты и проходят ли работы код-ревью.
Сравнить школы по цене, формату и поддержке поможет рейтинг онлайн-школ с обучением Kotlin. Перед оплатой откройте Kotlin Playground и напишите функцию, которая принимает String? и возвращает длину строки или ноль без единого !!: если задача увлекла, а не раздражила, язык вам, скорее всего, подойдёт.