Что такое Kotlin и с чем его едят: обучающее руководство и сравнение нового языка Android-разработки с Java
Рассказываем о языке Kotlin, созданном российской компанией JetBrains и недавно выбранном Google в качества основного языка Android, и делимся руководством.
108К открытий108К показов
Kotlin — это относительно молодой язык от российской компании JetBrains. Появился он в 2011 году. На конференции Google I/O 2017 команда разработчиков Android сообщила, что Kotlin получил официальную поддержку для разработки Android-приложений.
Как и Java, C и C++, Kotlin — это статически типизированный язык. Он поддерживает как объектно-ориентированное, так и процедурное программирование. По аналогии с вышеупомянутыми языками, основной код Kotlin-программы пишется в функции main
, которой передаётся массив аргументов командной строки:
Вот основные возможности и преимущества Kotlin:
- компилируется в байткод JVM или в JavaScript;
- программы могут использовать все существующие Java-фреймворки и библиотеки. Kotlin можно интегрировать с Maven, Gradle и другими системами сборки;
- язык очень прост для изучения;
- исходный код открыт;
- в IntelliJ доступна автоматическая конвертация Java-кода в Kotlin и наоборот;
- язык null-безопасен — надоедливые NullPointerException остались в Java. Вот пример кода:val name: String = null // попытка присвоить null, не скомпилируется.fun getName() : String = null // попытка вернуть null, не скомпилируется.
- легко читаемый синтаксис не составит проблем при 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. Серия состоит из следующих частей:
- Настройка Android Studio.
- MainActivity.kt: синтаксис, null-безопасность и другое.
- NewsFragment.kt: функции-расширения, Android-расширения и т.д.
- RecyclerView : классы данных и адаптеры делегатов.
- Kotlin, RxJava и RxAndroid.
- API : Retrofit и Kotlin.
- Бесконечная прокрутка: функции высшего порядка и лямбды.
- Изменение ориентации экрана.
- Юнит-тестирование: Mockito, RxJava и Spek.
- Внедрение зависимостей: Kotlin и Dagger 2.
- Непрерывная интеграция: BuddyBuild.
- Заключение.
Если вам удобнее видеоформат, обратите внимание на русскоязычный видеокурс по Kotlin.
108К открытий108К показов