Почему следует выбрать Kotlin для следующего проекта на Android

Почему следует выбрать Kotlin для следующего проекта на Android

Почему может возникнуть такой вопрос? На сегодня можно было разрабатывать приложения для андроида на следующих технологиях:

Можно прочитать заметку о том как выбрать платформу разработки для мобильного приложения.

История

В июле 2011 JetBrains приоткрыла завесу нового языка программирования. Его назвали Kotlin. Это новый язык программирования для JVM. Основная философия языка заключается в том, что котлин лучше джавы. Стоит заметить, что первая релизная версия Production Ready вышла в 2016 году. А в 2017 Google анонсировал, что инструменты разработки на Kotlin будут включены в Android Studio.

Kotlin очень сильно похож на Swift. Приятно видеть, что отрасль принимает краткие и лаконичные языки.

Я подошел к Android разработке с нулевыми знаниями Kotlin и самыми базовыми знаниями Java. Лично мне не нравилось работать с Java после .net и Swift. Я выписал все плюсы и минусы выбора котлин как основного языка программирования для Android приложений и принял решение.

Плюсы

Минусы

Еще пол года назад минусов было значительно больше и вес их был серьезнее. На различных ресурсах можно встретить аналогичные сравнения. Я осознанно не выписывал все фишки языка отдельно, добавив их одним пунктом. Потому что они важны, но равноценны с остальными плюсами

Выводы

Приложение следует делать на Kotlin.

Впечатления от использования

Через месяц после разработки на котлине выявил несколько вещей уже по факту. Они собраны в одну кучу без разделения на плюсы и минусы, но от некоторых сильно печет. Не следует воспринимать это как минусы котлина, это его особенности и, возможно молодость. Со Swift сравнивать, учитывая бюджет Apple не стоит.

var vs val

Перменные это var, а константы это val. Да, отличаются эти ключевые слова одной буквой. И это довольно сильно бесит. К счастью Android Studio подсвечивает места, где используются var, а можно использовать константы.

Singleton

Чтобы сделать синглтон необходимо что-то вроде:

public class SharedPrefs private constructor() {
    private var sp: SharedPreferences

    init {
        sp = getAppContext().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE)
    }

    private object Holder { val INSTANCE = SharedPrefs() }

    companion object {
        val instance: SharedPrefs by lazy { Holder.INSTANCE }
    }
}

Операторы ? и !!

Котлин поддерживает ? и !!, но оказалось не очень удобно то, что нет возможность сделать unwrap. Приведу пример из Swift

var obj: MyClass? = nil
if let unwrapped = obj  {
  // do code
}

В Kotlin нет такой возможности. Единственное что рекомендуют делать и это пока работает - проверять на null.

var obj: MyClass?
if (obj != null) {
  // Тут obj не null, но тип у него все равно MyClass?
}

И в добавок ко всему нет тернарного оператора (a = b ? c : d). Правда есть адаптивная альтернатива if (a == b) c else d

Нет switch

Switch и case действительно нет. Зачем-то в замену привычных всем ключевых слов были введены when.

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // default block
        print("x is neither 1 nor 2")
    }
}

Не все поддерживается

Не работает foreach

Где-то работает, а для каких-то типов облом.

Из общих впечатлений. До сих пор не налажена работа с ассетами (это касается Андроида, а не котлина). Графика может быть в каком угодно формате (xml, png, jpg) но как готовить ее правильно информации нет. Используются сторонние решения, которые сейчас работают, завтра нет.

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

Если вы ранее игнорировали экосистему JVM, по любой причине, сейчас стоит рассмотрет Котлин и JVM еще раз.

Напоследок приведу картинку Google Trends

Google Trends

Тренд на том, что Google включит kotlin в официальную среду разработки.

Comments

comments powered by Disqus