Dmitriy Azarov

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

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

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

  • Стандартная Java. Это родной язык для всех приложений на андроиде
  • Xamain. На Xamarin можно разрабатывать приложения на C# для iOS, Android и Windows Phone.
  • PhoneGap и другие HTML аналоги. Сюда я пока отнесу Progressive Web App, представленный гуглом годом ранее. Сюда, потому что нет полноценной поддержки на iOS, да и по большому счету технология еще не Production Ready

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

История

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

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

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

Плюсы

  • Лаконичность языка. Kotlin очень похож на Swift. Свифт очень лаконичный язык с идеологией, что код читается как текст на английском языке.
  • Расширения, касты, именованные аргументы и множество других киллер-фич языка
  • Язык поддерживается Google и уже вышло несколько стабильных версий
  • Полная совместимость с Java. Классы на котлине можно использовать в джаве и наоборот и все это в одном проекте
  • Котлин это не академический язык, который придумали в научном круге для специфичных задач. Это индустриальный язык, созданный разработчиками специально для разработки приложений Android
  • Для того, чтобы подключить Kotlin не нужно все переписывать. Можно делать только новые части на котлине

Минусы

  • Маленькое сообщество и слабое продвижение. Это до сих пор действительно так. Хотя появляются сообщества, библиотеки, JetBrains проводит эвенты. Это накладывает отпечаток на чувство безопасности.

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

Выводы

Приложение следует делать на 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 в официальную среду разработки.

  • 23 авг 2017
  • kotlin, android
0 комментариев
Ваш комментарий
адрес не будет опубликован
Текст