Код
#статьи

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

Рассказываем про Kotlin — молодой язык родом из Питера, который вовсю теснит Java в мобильной и бэкенд-разработке.

Иллюстрация: Jeen Adams / Nikolai Prokofiev / Wikimedia Commons / Colowgee для Skillbox Media

Язык Kotlin вот уже третий год стабильно числится в любимчиках у программистов согласно опросу Stack Overflow. Его официально поддерживает Google, используют Jira и Adobe, а разработчики топовых приложений для Android переписывают на Kotlin свои продукты. Разбираемся, чем хорош этот язык, какие в нём есть фишки и сколько зарабатывают программисты.

Что такое Kotlin

Kotlin — это язык программирования, созданный в компании JetBrains. Его разработали в 2011 году на замену Java, который в компании считали чересчур многословным. Новый язык получился на 40% компактнее предшественника, что помогло ускорить работу над основным продуктом JetBrains — средой разработки IntelliJ IDEA. При этом Kotlin полностью совместим с Java, потому что запускается на его виртуальной машине (JVM).

Если же давать формальное определение, Kotlin — это объектно-ориентированный язык со статической типизацией. Что это значит?

Объектно-ориентированными называют языки, в которых все операции происходят с объектами — блоками кода, куда можно «складывать» несколько значений. Объектом может быть любая сущность с определённым набором характеристик. Например, персонаж в онлайн-игре или стикер со Спанч Бобом в Telegram. Все объекты проектируются по специальным шаблонам, которые называются классами.

Статическая типизация означает, что типы переменных задаются разработчиком до выполнения программы. Если вы объявили целочисленную переменную, текст в неё поместить уже не получится — компилятор сразу укажет на ошибку. Это замедляет разработку на начальном этапе, но добавляет надёжности.

Если хотите больше узнать про типизацию и её виды, почитайте одну из наших предыдущих статей — там всё просто и доступно написано, сразу разберётесь.

Кстати, корни теперь уже международной JetBrains — в Санкт-Петербурге. А свой язык они назвали в честь острова в Финском заливе. Помимо намёка на Питер, такое название ещё и подчёркивает связь с Java (и Ява, и Котлин — острова).

Что можно писать на Kotlin

Потенциально Kotlin можно использовать везде, где работает Java — а это и бэкенд, и веб, и десктоп, и куча других задач. Как говорит Андрей Бреслав, создатель языка, «Kotlin — это язык для всех платформ». И в этом большая доля правды.

Тем не менее у каждого языка есть своя ниша — та сфера, где его используют больше всего программистов. У Kotlin пока их две — это серверная и мобильная разработка. Хотя его всё чаще можно встретить и в других областях — например, в науке и Data Science.

Давайте рассмотрим все сферы по порядку.

Приложения для Android

До 2017 года официальным языком для Android-приложений был Java, но потом Google объявил свою мобильную ОС Kotlin-first:

  • частично — из-за долгого суда с Oracle из-за использования некоторых механик Java;
  • частично — потому, что разработчикам понравился новый язык, они стали стихийно писать на нём мобильные приложения и регулярно теребить корпорацию: «Вы же будете поддерживать Kotlin? Ну скажите это официально! Он хороший!»

Сегодня на Kotlin написано 80% самых скачиваемых программ в Play Market, включая приложения от Netflix, Twitter, Reddit и самого Google.

Кадр: Android Developers / YouTube

Серверные приложения

Благодаря совместимости с JVM, Kotlin можно запустить на любых серверах, где работает Java. Поэтому его часто используют для создания бэкенда — той части систем, которая выполняется на сервере и не видна обычному пользователю. Например, на Kotlin уже работают облачные сервисы Jira и некоторые продукты Adobe.

Эта ниша — одна из приоритетных для команды Kotlin. И несмотря на популярность Kotlin в мобильной разработке, DevRel-команды JetBrains говорят о своём языке исключительно в контексте серверной разработки, вообще не упоминая мобилку.

Веб-приложения (фронтенд)

Помимо бэкенда, есть ещё фронтенд — «фасадная» сторона интернета. Это разные кнопки, выпадающие меню и окошки, с которыми взаимодействуют пользователи. Почти весь фронтенд пишется на одном языке — JavaScript.

А Kotlin как раз умеет компилироваться в JavaScript — и такую его версию можно использовать для создания фронтенда. То есть на нём вполне реально написать и логику, и интерфейс — веб-приложение целиком.

Кросс-платформенные мобильные приложения

​​Допустим, нам нужно написать мобильное приложение для аренды самокатов. Оно должно одинаково хорошо работать и на айфонах, и на смартфонах под управлением Android.

В таком случае нам может помочь кросс-платформенная разработка — это когда мы пишем код один раз, а потом адаптируем под несколько систем. В Kotlin есть технология, которая позволяет так делать, — называется Multiplatform. Её используют уже довольно много компаний — например, тот же «Яндекс».

Наука и большие данные

Если вы работали с дата-сайенс, то наверняка знаете про Jupyter Notebook. Это среда разработки, которая может исполнять код по кусочкам и мгновенно давать результат. Её часто используют в машинном обучении, статистике и визуализации данных. Раньше в Jupyter писали только на Python, Ruby и R, но теперь можно и на Kotlin. Достаточно подключить пару библиотек, и можно делать свою Siri или Алису.

А ещё Kotlin активно осваивают учёные — например, физики и математики. Сейчас достаточно быстро развивается специальная библиотека KMath, которая приносит в Kotlin продвинутую математику и обеспечивает интеграцию с тем же TensorFlow.

Kotlin vs Java

Как мы писали выше, Java и Kotlin — функционально совместимые языки. Они действительно очень похожи: оба статически типизированы, поддерживают ООП и работают на JVM. В некоторых средах разработки их функции и классы даже можно смешивать. Теперь давайте посмотрим, чем эти языки отличаются.

Читаемость

Когда язык Java только появился, он был гораздо проще и лаконичнее конкурентов — тех же C и C++. Да у него и сейчас достаточно понятный и логичный синтаксис — правда, по современным меркам этот язык уже кажется многословным и несколько старомодным. Это и неудивительно: в Java всё вертится вокруг обратной совместимости, которая так важна для энтерпрайза, в котором «кофейный» язык является стандартом.

Создатели же Kotlin изначально делали ставку на компактность: чем меньше ненужного кода, тем проще работать программисту и тем быстрее идёт разработка. В итоге одной строкой в Kotlin можно описать то, на что в Java уйдёт восемнадцать. Сравните, как по-разному выглядят классы данных на двух языках.

Создание класса Person на Java:

public class Person {
    private final String name;
    private final int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

Объявление того же класса на Kotlin:

data class Person(val name: String, val age: Int)

Скорость

Тут шайба, кажется, на стороне Java. Он лучше адаптирован под JVM, поэтому приложения компилируются на 15–20% быстрее в сравнении с Kotlin. Однако существует такая штука, как инкрементальная компиляция — это когда пересобирается не весь проект, а только те участки, где программист внёс изменения.

Если подключить к Kotlin специальный плагин, обеспечивающий такую компиляцию, то сборка может проходить даже быстрее, чем на Java. Так что в этом пункте ничья.

Популярность

Наряду с Python и C, Java — один из самых популярных языков программирования в мире. В рейтинге TIOBE за март 2022 года Java занимает третье место, а Kotlin — пока только 31-е. Однако важно помнить, что Kotlin — язык новый, и область его применения постоянно растёт. В то же время Java всё чаще используется для поддержки старых проектов, а не для создания новых.

Безопасность

Безопасность — это то, как язык защищает программиста от его собственных ошибок. В языках со статической типизацией, таких как Java и Kotlin, компилятор следит, чтобы не смешивались несовместимые типы данных — например, строка и число.

В Kotlin вшито несколько функций, которые упрощают работу с типами — например, язык может сам привести переменные к единому типу, если того требует логика кода. Эта функция называется smart cast, или «умное преобразование».

Другие киллер-фичи Kotlin

Вот ещё несколько фишек, которые дают Kotlin преимущество в скорости, безопасности и производительности.

Корутины

Coroutines (корутины) — это средство, которое обеспечивает параллелизм, чтобы программа могла выполнять несколько операций одновременно. Когда возникает необходимость, выполнение одной функции приостанавливается с сохранением данных, и начинает работать другая функция.

Инфографика: Skillbox Media

Допустим, нам нужно сделать приложение — электронный дневник, чтобы ученик мог зайти в него, узнать свои оценки и посмотреть, что задали.

Если загружать с сервера все данные последовательно, то приложение будет открываться очень долго. Вместо этого ненужные пока данные (например, новости), можно вынести в корутину и поставить их подгрузку на паузу, пока грузится основной интерфейс.

Корутины позволяют расставить приоритеты в работе программы. Этот механизм напоминает многопоточность, но тратит меньше ресурсов процессора — за что их и ценят, например, в мобильной разработке.

Функции-расширения

В языках программирования с поддержкой ООП все объекты строятся по специальным шаблонам, которые называются классами. Они содержат базовые сведения о том, как должен выглядеть и работать объект.

Иногда по ходу исполнения программы нам нужно расширить класс и добавить в него новые параметры. В Kotlin это можно легко и изящно сделать с помощью специальных функций-расширений. Выглядит это так:

// Добавляем функцию Titanic к объекту Introduce. Название объекта выносится в префикс
fun Introduce.Titanic(): String{ 
return "I am " + this 
}

//Далее вызываем функцию
val Leo= "the king of the world"
println(Leo.Titanic())

Null safety

Те, кто пишет на Java, часто сталкиваются с исключением под названием Null Pointer Exception. Это такая штука, которая вылезает во время выполнения программы, если в проекте есть строка, которая ссылается на переменную с нулевым значением.

В больших и сложных проектах поиск строки с ошибкой может занять много времени и сильно потрепать нервы. В Kotlin такой проблемы нет, потому что все переменные по умолчанию не нулевые. Компилятор сразу перестанет собирать проект, если значение какой-то строки равно нулю, и ошибка не вылезет в готовой программе.

Мы подробно разбирали, что такое исключения в Java и как с ними работать, в своём цикле статей.

Скриншот: Skillbox Media

Что по деньгам

Программировать на Kotlin пока умеет не так много разработчиков, поэтому компании готовы предлагать неплохие деньги даже новичкам. В глобальном списке лучше всего оплачиваемых языков Kotlin находится примерно посередине, обгоняя JavaScript, SQL, PHP и Java, но уступая лидерам: Perl, Go и Scala (данные Stack Overflow).

На российском рынке Kotlin в топе по зарплатам. По данным «Хабр Карьеры», за 2021 год средний оклад котлинистов вырос на 13% — со 160 до 180 тысяч рублей в месяц.

Инфографика: блог компании «Хабр Карьера»

В Москве и Питере мы нашли 2100 вакансий для тех, кто умеет программировать на Kotlin. Три четверти компаний ищут Android-разработчиков, остальные — бэкендеров и аналитиков данных. Зарплаты новичков варьируются от 30 до 100 тысяч рублей, мидлов — от 120 до 250 тысяч. Сеньоры и тимлиды могут получать до полумиллиона в месяц.

Если хорошо знаете английский, можете попробовать удалённо устроиться в американскую или европейскую компанию. Kotlin-разработчики там тоже нужны, и их труд довольно хорошо оплачивается: от 4000 долларов на старте.

Но перед этим советуем хотя бы немного поработать на российском рынке — джунам без опыта получить должность за рубежом практически нереально.

С чего начать?

Kotlin — очень лаконичный язык, в нём нет формальных операций, ненужных проверок типов и других раздражающих вещей. Его легко выучить даже новичку, но сначала надо будет глубоко погрузиться в предмет.

Начните изучать Kotlin c документации — на сайте JetBrains она доступна только на английском, но есть почти официальный перевод от сообщества. Можно почитать книгу «Kotlin в действии» от создателей языка, Дмитрия Жемерова и Светланы Исаковой. Там достаточно ясно и доходчиво изложены основы языка. А ещё в JetBrains Academy можно пройти бесплатный курс по основам Kotlin — правда, он на английском.

Бесплатные гайды по Kotlin есть и у Google: как для новичков, так и для тех, кто уже умеет программировать на Java. Они тоже подойдут только тем, кто хотя бы немного дружит с английским, — перевода в открытом доступе мы найти не смогли.

У программистов есть лайфхак, как учиться быстрее и интереснее. Нужно придумать свой пет-проект и начать его делать прямо во время учёбы. Это может быть любая несложная программа: например, таск-менеджер, парсер новостей или бот в Telegram. Плюс пет-проекта в том, что в него можно встроить сложную абстракцию и сразу посмотреть, как она работает. А ещё его можно положить в портфолио и потом показывать работодателям.

На первых порах для упражнений хорошо подойдёт онлайн-компилятор Kotlin Playground. Когда будете готовы писать приложение, понадобится инструмент посерьёзнее — например, среда разработки Android Studio от Google или IntelliJ IDEA от JetBrains.

Если же интересно вкатиться именно в Android-разработку, можно выбрать курс от Skillbox «Android-разработчик». За 12 месяцев научим программировать на Kotlin, проектировать интерфейсы и создавать приложения на уровне Junior-специалиста. На выходе будет диплом — сможете написать свою соцсеть и положить её в портфолио.

Что нужно новичку

Требования работодателей к новичкам сильно зависят от ниши. Если метите в бэкенд, изучите фреймворки Kotlin для работы с сервером: например, Spring, Ktor и Vert.x. Плюсом к ним надо будет освоить протокол HTTP, форматы XML и JSON, научиться работать с SQL-запросами и одной из популярных баз данных — например, PostgreSQL.

Для разработки под Android джуну нужно знать Android SDK, уметь работать в Git и Android Studio (и/или IntelliJ IDEA), понимать, как устроены корутины и многопоточность. Ещё с вас обязательно спросят и паттерны проектирования: MVC, MVP и MVVM.

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

Проверьте свой английский. Бесплатно ➞
Нескучные задания: small talk, поиск выдуманных слов — и не только. Подробный фидбэк от преподавателя + персональный план по повышению уровня.
Пройти тест
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована