Flutter или Kotlin? Есть два стула

Кроссплатформенная разработка становится более популярной, нежели нативная. Причины этого: быстрый путь на рынок, малые затраты времени и денег, и главное, единый код для всех платформ. Вряд ли для 90% приложений необходим доступ например к гироскопу или компасу, где важны нативная скорость и прямой доступ к железу, поэтому сейчас большинство приложений в магазинах именно кроссплатформенные.

Команды и фрилансеры убеждаются, что кроссплатформенная разработка это то, что надо хотя бы попробовать. В данное время, на мировом рынке “кроссплатформы” лидирует React Native (RN), с совсем небольшим отрывом от Flutter, и активно набирает популярность Kotlin Multiplatform. Поэтому сейчас мы сравним две последних вещи.

Примечание. Мы сравниваем по нескольким параметрам. Выбор технологии – субъективный, конечный выбор зависит, все же, от особенностей проекта. Этот пост поможет понять разницу между платформами, и облегчит выбор.

Итак, начнем

Для начала, освежим понимание: Flutter это фреймворк (или тулкит) вокруг языка программирования Dart, а Kotlin это язык программирования.

Кратко

Flutter:

Это Google-овский тулкит для сборки нативных, компилируемых, достаточно функциональных приложений для, важно заметить, не только смартфонов, но и для веб-сайтов, и десктопных компьютеров. Есть быстрорастущее активное комьюнити, поддерживающее начинающих разработчиков опенсорсными приложениями и бесплатными советами. В Flutter’е можно писать приложения для: Android, iOS, Linux, Windows, Mac, Google Fuchsia, и для обычных веб-сайтов, и все это – на общей codebase, то есть “единым кодом, общим для всего”.

Kotlin:

Язык “общего назначения”, создаваемый компанией с частично российскими корнями – JetBrains. Создавался с прицелом на полную взаимозаменяемость и “интероперабельность” с Java. Хороший брат-близнец Java. Уже давно поддерживается Google, в числе их официально поддерживаемых языков для Android-приложений. Быстро набрал популярность после официального признания Google-ом.

Давайте сравним Flutter и Kotlin, учитывая следующие критерии:

  • Производительность
  • Комьюнити
  • Популярность
  • Легкость освоения
  • Время разработки
  • Затраты
  • Приятность для пользователя

Производительность

Под капотом Flutter – язык программирования Dart. Приложения Flutter работают весьма быстро. Они не зависят от разных там web-view или специфических OEM-оболочек смартфона. У Dart собственный движок рендеринга, отрисовывающий все видимые компоненты. Набор виджетов и компонентов довольно широкий, здесь все нужное: иконки, шрифты, элементы навигации, и прочие UI-“финтифлюшки”. Работает это хозяйство быстро, как настоящее нативное, на обеих главных платформах, iOS и Android.

По всеобщему убеждению, Flutter обычно работает чуть быстрее, чем Kotlin, и по заявлениям Google, в идеале должен обеспечивать частоту кадров честных 60 fps. Производительность Flutter можно оценить из того, как быстро виджеты отрисовываются, и как плавно реагируют на действия. Flutter, надо отметить, изначально создавался как UI-тулкит, и был “заточен” на фронтэнд-часть приложений. Что сказывается.

Kotlin, как уже говорилось, создавался как язык общего назначения, и как “более лучшая Java”, с каковой его неизбежно сравнивают. Это типичный объектно-ориентированный язык, уже несколько лет применяется для быстрого написания кросс-платформенных приложений (Kotlin Multiplatform).

С точки зрения производительности, приложения на Kotlin могут не уступать нативным и Flutter-приложениям на всех платформах. В Google – около 60 приложений, написанных на Kotlin. Код на Kotlin компилируется в байт-код, “родной” для платформы. Это делает Kotlin мощной и современной вещью для писания кроссплатформенных приложений.

Как Kotlin, так и Flutter – очень производительные платформы, но в целом их производительность зависит от функций и компонентов, примененных в проекте.

Комьюнити

Google’овский Flutter развивается с участием активной комьюнити, состоящей из разработчиков, дизайнеров и просто энтузиастов. База разработчиков быстро растет, подталкиваемая солидными организациями, да и и компаниями, где пишут на Dart/Flutter. Комьюнити старается превратить Flutter в “платформу, которая прежде всего приходит на ум, когда нужно сделать быстрое и приятное приложение”, работающее одинаково хорошо на смартфоне, веб-сайте, и на десктопе.

У Kotlin также существует большая доброжелательная комьюнити. Нужно учесть, что все же Flutter намного более молодой фреймворк, а Kotlin успел “заматереть”, будучи уже стабильной, состоявшейся вещью в мире Android-разработки. При этом темп не потерялся, Kotlin и дальше развивается, есть богатая экосистема. Kotlin поддерживается компанией JetBrains, лидирующей во всем что касается IDE да и других “тулзов” для разработчиков и проект-менеджеров.

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

С Flutter работают в Google, Square, eBay, BMW, Alibaba, и в других компаниях, со столь же громкими именами. Вышедший в марте Flutter 2 встречен дружным одобрением комьюнити. Вообще, Flutter – это одна из самых активных комьюнити по крайней мере на Github (120 тыс “звездочек”).

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

По прошлогоднему опросу StackOverflow, Kotlin в числе 5 самых любимых языков. Этот язык, точнее, на 4-м месте по популярности в опросе StackOverflow, тогда как Dart/Flutter – на 7-м (опрос Developer Survey здесь)

Kotlin достаточно гибкий язык, и легкий в изучении, поэтому разработчики осваивают его. На Kotlin пишут например в Google, Adobe, Zomato, VMWare, ING Bank, Uber, Pinterest, Evernote, Coursera, Trello, Slack, Udemy.

Простота освоения

Если речь о Dart, то он создавался как язык кроссплатформенной разработки для одновременно: веб-сайтов, смартфонов обеих главных платформ, серверов, и в конечном итоге десктопных компьютеров (а как же). Язык, как уже сказано, создан и поддерживается Google, и он довольно прост для освоения ЕСЛИ вы уже знаете С++, или С#, или Java, или JavaScript, или хотя бы Python.

Dart относится к type-safe-языкам, что облегчает работу. По усредненным отзывам разработчиков, Dart в принципе простой в изучении и в отлове ошибок, неизбежных сначала.

Синтаксис Kotlin тоже покажется знакомым для знающих перечисленные выше языки, а больше всего похож на Java, Scala, Groovy или Swift. Лучше всего “войти в Kotlin”, зная Java, тогда этот переход будет быстрее всего. Язык полностью совместим с Java, и Java-разработчики полагают, что 90% Java-приложений можно быстро переписать на Kotlin.

Затраты времени

Flutter позволяет активно экспериментировать и быстро внедрять корректировки в коде, вообще написание кода и прототипирование очень быстрое. Есть, как уже сказано, широкий набор готовых виджетов, многоуровневая архитектура, возможности настройки “под себя”, а также функциональность “Stateful Hot Reload” не нагружающая смартфон – позволяют разработчику писать приложения, по быстроте работы и по виду не уступающие нативным приложениям.

В целом, затраты времени на Flutter-разработку, возможно, бывают чуть меньше, чем в случае с Kotlin. Вместе с тем, в Kotlin как бы более “лаконичный” синтаксис, и лучше “реюзабельность” кода, так что по времени разработки, видимо, языки близки к паритету.

Стоимость

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

Для работы в Flutter нужно знать Dart, достаточно специфический хоть и, говорят, легкий язык, и многие разработчики не смотрят на Dart как на “major skill”. Язык развивающийся, его рассматривают как “ок, возможно” многие компании.

Что насчет UI

Когда говорится о кроссплатформенности, UI играет первейшую роль. Главная цель кроссплатформенности – вид и ощущения, “везде как нативные”. Flutter дает это, здесь одинаковый “экспириэнс” на всех платформах. Его UI-тулкит создан с вниманием к каждому UI-компоненту, вполне можно говорить о “нативном уровне производительности” как на Android, так и в iOS.

В Kotlin – хорошие возможности кастомизации, перенастройки интерфейсов. Нет никаких ограничений, как сделать UI в каждом приложении. Это позволяет применять “нативные” фичи когда хочется, или писать отдельно для каждой платформы.

Коротко

Плюсы Flutter

Функция Stateful Hot Reload
Полная кастомизация виджетов
Яркие UI-компоненты
Нативная быстрота
Небольшие затраты времени и денег

Минусы Flutter

Иногда “вопросы” с производительностью на iOS
Большой размер файлов
Довольно мало third-party библиотек и интеграций
Специфический язык Dart не всем по нраву

Плюсы Kotlin

Полная взаимозаменяемость с Java
Четкий синтаксис и качественный код
Простота освоения
Производительность почти нативная
Быстрота написания и развертывания
Простое обслуживание кода

Минусы Kotlin

Компилируется медленнее, чем Java
Меньше программистов, чем на Java (да)

Попробуем еще раз описать аспекты этих двух языков/платформ другими словами.

Чем хорош Flutter, еще раз?

Flutter это фреймворк, который здорово бережет время разработчика, и экономит затраты. Flutter очень хорош для создания так называемых MVP (Minimum Viable Products), рабочих прототипов, приложений достаточно простых, но полностью работоспособных и могущих сразу привлечь массового клиента. Прототипы это Flutter, когда время и деньги – “горят”. Flutter можно применять в малых, средних, и крупных компаниях. По сумме отзывов, лучше всего Flutter показал себя в разработке онлайн-магазинов, в финтехе, и в бизнес-приложениях.

И где хорош Kotlin?

Kotlin поддерживается JetBrains, где уже есть множество специальных продуктов “под Java” и других вещей, облегчающих жизнь программисту. Kotlin направлен на устранение некоторых “узких мест” в Java (справедливости ради, этих мест еще осталось много). Полная взаимозаменяемость с Java – важнейшая причина, почему Kotlin популярен. Его можно включить в давно существующий проект, кроссплатформенное приложение, и даже в код для server-side.

Kotlin, все-таки, лучше, когда запускается новый проект для Android, или когда нужно быстро внести корректировки в существующий проект. Кроссплатформенный Kotlin уже очень хорош (хоть он и экспериментальный), когда большой размер получившегося приложения, и его разросшиеся многочисленные зависимости – не столь важны вам.

Разница между Kotlin и Flutter в одной таблице

Мы сравниваемFlutterKotlin
ОписаниеКроссплатформенный фреймворк от GoogleЯзык со статическими типами, объектно-ориентированный, созданный “с заточкой” на JVM и JavaScript
ВендорGoogleJetBrains
Год создания20172011
ПлатформыAndroid, iOS, Google Fuchsia, Web, Linux, macOS, WindowsAndroid, JVM, iOS, macOS, Windows, Linux, JavaScript, WebAssembly
Простота изученияНадо изучить особенности Dart, что не так уж простоПохож на Java, C#, Python, JavaScript, то есть довольно понятный
Размер готового приложенияДостаточно большойМеньше, чем на Flutter
ПроизводительностьПочти нативная, на всех платформахМедленнее компиляция, но довольно быстро работает, на всех платформах
ПрименениеСоздания приложений нативного вида и такой же быстроты, для веба, для смартфонов, и дестктопных компьютеров, везде один кодНаписания Android-приложений, полностью совместимых с Java, для корректировки и дополнения написанных на Java
Популярность, судя по Github119 тысяч “звездочек”37 тысяч “звездочек”
Известные приложенияGoogle Ads, Alibaba, Square, eBay, BMWCoursera, Evernote, некоторые Google, Pinterest, Corda, Slack, Trello
КомьюнитиБыстро растет, постоянные обновленияАктивное, плюс множество Java-продуктов и Java-инструментов к вашим услугам
Популярность, судя по StackshareО применении Flutter в своем “стеке технологий” заявляют 285 компанийО применении Kotlin заявила 941 компания
СтатусОтносительно новый, в сравнении с KotlinДовольно зрелый и стабильный язык, так же и инструменты-tools под Kotlin
Специальные функцииStateful Hot Reload, полностью кастомизируемые виджеты, ориентированность платформы на хороший UIПолнейшая взаимозаменяемость с Java, четкость синтаксиса, безопасность, поддержка функционального программирования

Важно понять

Идеальных фреймворков и языков нет. Dart и Kotlin имеют свои плюсы и минусы. В целом, оба языка дают приличную производительность, не особенно затратны по времени и деньгам. Flutter в 2021 году наглядно популярнее чем Kotlin (по крайней мере уже больше хайпа), хотя появился намного позже. Kotlin приличнее выглядит в Android-разработке. Что касается кроссплатформенности, обе платформы дают “почти нативные” приложения “единым кодом”.

Пример из реального опыта

Кодер Tiago Loureiro на Dev.to поделился опытом разработки на обеих платформах. В их случае, пришлось переписать на Kotlin low-level код и бизнес-логику, однако оставить на Flutter UI-слой приложения.

Kotlin пригодится, если:

Уже есть много native-specific кода, который нужно использовать;
Нужно “100%-нативно выглядящее” приложение;
Нужно постепенно распространять существующий код на другие платформы;
Не нужны веб-версия и десктопная версия приложения;
Нельзя себе позволить зависеть от качества имплементации движка Flutter на каждой платформе;
Проект не слишком срочный; тогда можно забыть, что Kotlin Multiplatform Mobile все еще в альфа-версии!;
Приложение “стоит” на мультипоточности, или сильно зависит от фоновой обработки данных.

Замечание об альфа-статусе KMM важно, поскольку многие API могут измениться в стабильной версии. Активно идет пересмотр механизмов управления памятью в KMM, также и механизмов многопоточности, и обработки неизменяемых объектов (immutable), поэтому эти вопросы нужно учесть.

Flutter хорошо работает, если:

Вы в небольшой команде разработчиков, не имеющей возможности/времени поддерживать одновременно две нативных codebase;
Приложение “стоит” на немногих простых API и немногих обращениях к базе данных (а такими являются большинство мобильных приложений);
В приложении будет настраиваемый, кастомный пользовательский интерфейс; или быть может какой-то “особый” интерфейс;
Вы делаете приложения также для веба и для десктопа, а не только смартфонов, и хотите чтобы оно нормально работало “везде и сразу”.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Scroll to Top