Что такое Kotlin и с чем его едят: обучающее руководство и сравнение нового языка Android-разработки с Java

Kotlin

Kotlin — это относительно молодой язык от российской компании JetBrains. Появился он в 2011 году. На конференции Google I/O 2017 команда разработчиков Android сообщила, что Kotlin стал официальным языком операционной системы.

Как и Java, C и C++, Kotlin — это статически типизированный язык. Он поддерживает как объектно-ориентированное, так и процедурное программирование. По аналогии с вышеупомянутыми языками, основной код Kotlin-программы пишется в функции main, которой передаётся массив аргументов командной строки:

Вот основные возможности и преимущества Kotlin:

  • компилируется в байткод JVM или в JavaScript;
  • программы могут использовать все существующие Java-фреймворки и библиотеки. Kotlin можно интегрировать с Maven, Gradle и другими системами сборки;
  • язык очень прост для изучения;
  • исходный код открыт;
  • в IntelliJ доступна автоматическая конвертация Java-кода в Kotlin и наоборот;
  • язык null-безопасен — надоедливые NullPointerException остались в Java. Вот пример кода:
  • легко читаемый синтаксис не составит проблем при code review.

Разберём некоторые из них поподробнее.

Null-безопасность

При попытке присваивания или возвращения null код не скомпилируется. Тем не менее, в языке есть поддержка Nullable-типов. Задать такую переменную или функцию можно, приписав ? к названию типа:

Гибкость и простота синтаксиса

Простые функции и структуры можно объявить одной строкой. Геттеры и сеттеры задаются за кулисами для интероперабельности с Java-кодом. Добавление data-аннотации к классу активирует автоматическую генерацию различных шаблонов.

Рассмотрим следующий пример:

Отличия от Java

Null-безопасность

Как уже говорилось ранее, Kotlin не допускает возникновения NullPointerException, выдавая ошибку компиляции.

Классы данных (Data Classes)

В Kotlin появились специальные классы, предназначенные специально для хранения данных. Они генерируют различные шаблоны: equals(), hashCode(), toString(), геттеры и сеттеры и т.д. Сравните код на Java:

И на Kotlin:

Легко создавать копии классов данных при помощи метода copy():

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

Kotlin позволяет расширять функциональность существующих классов, не прибегая к наследованию. Это делается при помощи функций-расширений. Для объявления такой функции к её имени нужно приписать префикс в виде расширяемого типа. Вот так можно добавить функцию swap в MutableList:

Ключевое слово this внутри функции-расширения относится к объекту-получателю, который передаётся перед точкой. Теперь мы можем применить функцию swap к любому изменяемому списку:

Умные приведения типов

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

Вывод типов

В Kotlin необязательно явно указывать тип переменной:

Функциональное программирование

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

Функции высшего порядка — это функции, которые принимают другие функции в качестве аргументов и возвращают функции. Рассмотрим следующий пример:

В нём func — это имя аргумента, а ( ) -> Unit — это тип функции. Мы говорим, что func будет функцией, не принимающей аргументов и ничего не возвращающей.

Лямбда-выражения, или анонимные функции — это функции, которые не объявляются, а передаются в виде выражений. Вот пример:

Мы объявляем переменную sum, которая берёт два числа, складывает их и принимает значение суммы, приведённое к целому. Для вызова достаточно простого sum(2,2).

Сравнение скорости Java и Kotlin

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

Будущее Kotlin

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

В изучении этого языка вам поможет серия статей, описывающая процесс создания простого мобильного приложения Keddit — клиента для популярного ресурса Reddit. Все ее части для вашего удобства мы перечислили в списке ниже.

Вам потребуются следующие библиотеки:

  • Retrofit 2.0;
  • RxJava;
  • Picasso;
  • RecyclerView;
  • Расширения Kotlin для Android;
  • Dagger 2.

Все исходники доступны на GitHub. Серия состоит из следующих частей:

  1. Настройка Android Studio.
  2. MainActivity.kt: синтаксис, null-безопасность и другое.
  3. NewsFragment.kt: функции-расширения, Android-расширения и т.д.
  4. RecyclerView : классы данных и адаптеры делегатов.
  5. Kotlin, RxJava и RxAndroid.
  6. API :  Retrofit и Kotlin.
  7. Бесконечная прокрутка: функции высшего порядка и лямбды.
  8. Изменение ориентации экрана.
  9. Юнит-тестирование: Mockito, RxJava и Spek.
  10. Внедрение зависимостей: Kotlin и Dagger 2.
  11. Непрерывная интеграция: BuddyBuild.
  12. Заключение.

Если вам удобнее видеоформат, обратите внимание на русскоязычный видеокурс по Kotlin.

Адаптированный перевод статьи «Overview of Kotlin & Comparison With Java»