Кроссплатформенная разработка становится более популярной, нежели нативная. Причины этого: быстрый путь на рынок, малые затраты времени и денег, и главное, единый код для всех платформ. Вряд ли для 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 в одной таблице
Мы сравниваем | Flutter | Kotlin |
Описание | Кроссплатформенный фреймворк от Google | Язык со статическими типами, объектно-ориентированный, созданный “с заточкой” на JVM и JavaScript |
Вендор | JetBrains | |
Год создания | 2017 | 2011 |
Платформы | Android, iOS, Google Fuchsia, Web, Linux, macOS, Windows | Android, JVM, iOS, macOS, Windows, Linux, JavaScript, WebAssembly |
Простота изучения | Надо изучить особенности Dart, что не так уж просто | Похож на Java, C#, Python, JavaScript, то есть довольно понятный |
Размер готового приложения | Достаточно большой | Меньше, чем на Flutter |
Производительность | Почти нативная, на всех платформах | Медленнее компиляция, но довольно быстро работает, на всех платформах |
Применение | Создания приложений нативного вида и такой же быстроты, для веба, для смартфонов, и дестктопных компьютеров, везде один код | Написания Android-приложений, полностью совместимых с Java, для корректировки и дополнения написанных на Java |
Популярность, судя по Github | 119 тысяч “звездочек” | 37 тысяч “звездочек” |
Известные приложения | Google Ads, Alibaba, Square, eBay, BMW | Coursera, 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 и немногих обращениях к базе данных (а такими являются большинство мобильных приложений);
В приложении будет настраиваемый, кастомный пользовательский интерфейс; или быть может какой-то “особый” интерфейс;
Вы делаете приложения также для веба и для десктопа, а не только смартфонов, и хотите чтобы оно нормально работало “везде и сразу”.