• Flutter
  • Kotlin

Kotlin или Flutter: что выбрать бизнесу?

reading time icon0 мин
Александра Смолик
Александра СмоликФаундер CHILLICODE

В CHILLICODE мы постоянно отслеживаем технологии. Без этого трудно вообразить разработку мобильных приложений и веб-решений точно в срок, без превышения бюджетов. К тому же, эти знания позволяют нам заранее предугадать, чего могут ожидать клиенты. 

В этом контексте дилемма Kotlin или Flutter представляет особый интерес. Обе опции популярны и широко используются. Одновременно, как говорит нам наш опыт и бизнес-практика, и Kotlin, и Flutter имеют свои плюсы и минусы. Они не являются ни взаимозаменяемыми, ни универсальными инструментами. В этом обзоре мы их сравним, чтобы читатель мог выбрать подходящий вариант и вытянуть из него максимум.

Итоговое решение, на самом деле, не такое простое. Kotlin и Flutter могут гордиться своим относительно равным статусом и признанием:

Kotlin для кроссплатформенной разработки 

Kotlin служит инженерам в качестве технически адекватной опции с открытым исходным кодом, разработанной под связку с Java. Он был задуман и разработан компанией JetBrains как статически типизированный язык для JVM (сокращение от «Java Virtual Machine»), Android и браузерных решений.

Ключевыми вехами для Kotlin были: 2011 год, когда JetBrains представила его на саммите по языкам JVM. 2016 год, когда был запущен Kotlin 1.0. И в особенности 2017 год, когда Google объявила Kotlin официальным языком для разработки приложений для Android, наравне с Java.

 Компании, использующие Kotlin
Компании, использующие Kotlin

Говоря о преимуществах Kotlin, мы в CHILLICODE просуммировали бы их следующим образом:

Аргументы в пользу Kotlin 

1. Совместимость с Java 

Использовать код от Kotlin и Java в одних и тех же проектах можно без проблем. Это делает Kotlin привлекательным для инженеров, постепенно внедряющих его, параллельно с использованием библиотек и фреймворков Java

2. Четкий синтаксис

Более четкий синтаксис Kotlin по сравнению с Java радикально улучшает читаемость и понимание кода. Это позволяет избежать проблем шаблонного кода и создать более чистую и легко читаемую кодовую базу. В Kotlin доступны такие возможности, как вывод типов, классы данных и функции расширений, которые способствуют еще большей ясности и компактности кода

3. Официальная поддержка от Google в плане разработки на Android 

Благодаря своим ресурсам Google обеспечивает неограниченную поддержку Kotlin. Существует активное глобальное сообщество разработчиков, а также глубокая интеграция с Android Studio, что обеспечивает удобство и эффективность в работе с языком

4. Устранение исключений формата «Null Pointer»

Kotlin был создан, в том числе, для решения проблемы исключений типа «Null Pointer». Благодаря этому код становится более устойчивым и менее подверженным сбоям при выполнении

5. Асинхронная разработка

Kotlin предоставляет встроенную поддержку параллельных процессов, что позволяет разработчикам эффективно и последовательно работать с асинхронным кодом

Посмотрим на Flutter? 

Говоря о сравнении Flutter и Kotlin, перейдем к следующей части. Flutter был представлен компанией Google как открытая альтернатива для создания пользовательских интерфейсов еще в 2015 году, а его рабочий релиз состоялся в 2017 году. В 2018 году были представлены возможности для веб-разработки. В 2021 году вышел Flutter 2.0, который обещал значительные улучшения и дополнения, включая расширенную поддержку для создания веб-приложений и приложений для десктопа.

Сайт Flutter

С технической точки зрения, Flutter используется для создания нативно скомпилированных мобильных, веб- и десктоп-приложений, используя единую кодовую базу. Это позволяет IT-командам писать код только один раз и затем выполнять его на различных платформах, таких как Android, iOS и веб, без ущерба для производительности или пользовательского опыта.

Что касается основных преимуществ кроссплатформенной разработки на Flutter, мы в CHILLICODE бы выделили следующие:

Плюсы разработки на Flutter

1. Библиотека виджетов

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

2. Hot Reload, она же горячая перезагрузка

Функция горячей перезагрузки в Flutter позволяет разработчикам мгновенно видеть результаты изменений в коде без необходимости перезапуска приложения. Это существенно ускоряет процесс разработки, позволяя быстро тестировать и применять изменения

3. Беспроблемный доступ к внутренним функциям гаджетов для нативности приложения

Flutter делает плагины легко доступными, предоставляя доступ к функциям и API, специфичным для различных устройств

4. Потенциал анимации 

Flutter также обеспечивает обширные возможности для визуальных аспектов, предоставляя разнообразные API и инструменты для создания продвинутых анимаций и переходов

5. Помощь от Google 

Flutter также полагается на поддержку со стороны Google, что обеспечивает помощь, регулярные обновления и беспроблемную интеграцию с другими сервисами и инструментами компании Google

 

Сравнение Flutter и Kotlin в плане синтаксиса

Для конечного пользователя значение имеют лишь быстрота и удобство при взаимодействии с приложением. А вот для разработчика важно еще и как именно этих целей достичь. Речь о синтаксисе при написании кода, от него зависит оперативность работ по проекту и его дальнейшая судьба в плане масштабирования и апгрейдов. Пришло время для сравнения под этим углом.

Несколько базовых примеров 

1. Простейшая задача на вывод «Hello, World!» с Flutter (Dart)



void main() {

  print('Hello, World!');

}

2.Простейшая задача на вывод «Hello, World!» c Kotlin



fun main() {

    println("Hello, World!")

}

2. Задача по созданию класса «Person» с Flutter (Dart)

class Person {

  String name;

  int age;

  

  Person(this.name, this.age);

  

  void displayInfo() {

    print('Name: $name');

    print('Age: $age');

  }

}


void main() {

  var person = Person('Robert', 35);

  person.displayInfo();

}

3. Задача по созданию класса «Person» с Kotlin 


class Person(val name: String, val age: Int) {

    fun displayInfo() {

        println("Name: $name")

        println("Age: $age")

    }

}


fun main() {

    val person = Person("Robert", 35)

    person.displayInfo()

}

 

Теперь, имея перед собой эти примеры, суммируем, что общего у Flutter и Kotlin, и в чем их различия, влияющие на цикл разработки.

Общее: 

  • Краткость. Как Flutter, так и Kotlin позволяют создавать лаконичный и емкий код;

  • Объектно-ориентированность. Flutter и Kotlin придерживаются объектно-ориентированных образцов программирования. Классов, объектов, наследования;

  • Синтаксис в стиле C. И Flutter, и Kotlin предлагают напоминают C, что упрощает жизнь разработчиков, уже знакомых C++, Java и C#.

Различия, о которых стоит помнить при выборе между Flutter и Kotlin: 

  1. Вопрос с безопасностью обработки переменных, допускающих пустое значение. Или, говоря короче, «Null safety». В Kotlin встроена возможность минимизировать проблемы с исключением нулевого показателя. Во Flutter (Dart) это тоже присутствует, но на иной синтаксической основе. 

Синтаксис Kotlin 

Синтаксис Flutter 

var name: String? = null // nullable string

String? name; // nullable string

 

  1. Еще одно различие - это вопрос о выводе типов переменных. В Kotlin это довольно легко, и во многих случаях типы можно опустить. В Flutter такая возможность тоже есть, но она менее гибкая по сравнению с Kotlin.

 

Вывод типов: база с Kotlin

Вывод типов: база с Flutter

val age = 35 // type inferred as Int

var age = 35; // type inferred as int

 

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

 

Объявление и инициализация переменных с Kotlin

Объявление и инициализация переменных с Flutter

val name: String = "Robert"

var age: Int = 35

String name = "Robert";

int age = 35;

Объявление функций с Kotlin 

Объявление функций с Flutter

fun greet(name: String): String {

    return "Hello, $name!"

}

String greet(String name) {

    return "Hello, $name!";

}

Циклы с Kotlin 

Циклы с Flutter 

for (i in 1..5) {

    println(i)

}


while (condition) {

    // code

}

for (int i = 1; i <= 5; i++) {

    print(i);

}


while (condition) {

    // code

}

Инициализация коллекций с Kotlin 

Инициализация коллекций с Flutter 

val numbers = listOf(1, 2, 3, 4, 5)

val map = mapOf("key1" to "value1", "key2" to "value2")

List<int> numbers = [1, 2, 3, 4, 5];

Map<String, String> map = {'key1': 'value1', 'key2': 'value2'};

 

Заключительные ремарки относительно структур кода в Kotlin и Flutter. Kotlin придерживается более традиционной парадигмы объектно-ориентированного программирования, с ее классами, объектами и методами. Структура кода будет родной и знакомой для тех, кто пишет ПО на Java или C#. Flutter же основан на архитектуре с виджетами. То есть, UI-компоненты представляют собой те самые виджеты, которые можно компоновать между собой для создания сложных пользовательских интерфейсов. Это делает структуру кода более модульной и допускающей повторное использование написанного. Однако, к такому подходу надо еще привыкнуть.

Поговорим о скорости и производительности Kotlin и Flutter

При сравнении Kotlin и Flutter по параметрам скорости и производительности, не следует забывать: их цели заданы на разных уровнях. Нативные технологии Kotlin заточены для разработки приложений под Android, в то время как Flutter работает как набор инструментов для создания нативно скомпилированных решений для мобильных устройств, веба и десктопа, все на основе открытого исходного кода.

Эти цели предполагают характеристики: 

Потенциал Flutter 

Факт 1. Flutter — это фреймворк, использующий Dart и UI-компоненты. Последние предоставляются через графический движок Skia для рендеринга. 

Факт 2. Приложения на Flutter обычно имеют более медленное время запуска по сравнению с нативными решениями под Android из-за выполнения Dart и инициализации фреймворка Flutter.

Факт 3. Производительность UI во Flutter обычно адекватна. Она способна обеспечивать анимацию с частотой 60 на большинстве устройств.

Факт 4. Приложения на Flutter могут потреблять больше памяти по сравнению с нативными решениями под Android из-за времени выполнения Dart и фреймворка Flutter. Однако, благодаря эффективной сборке мусора, эти последствия можно смягчить.

Факт 5. Flutter компилирует код на Dart в нативный машинный код с использованием компилятора от Dart, «Ahead-of-Time» (AOT). Это способно повысить производительность и сократить объемы приложений. Кроме того, Flutter поддерживает компиляцию «Just-In-Time (JIT)» на этапе разработки. Это обеспечивает быстрые циклы итераций.



Потенциал Kotlin

Факт 1. Производительность Kotlin в основном определяется его JVM и средой выполнения Android (ART). Kotlin — это высокопроизводительный язык, и его эффективность сравнима с производительностью Java.

Факт 2. Кроме того, Kotlin обладает более быстрыми временными рамками компиляции по сравнению с Java. Благодаря своей инкрементальной природе и лаконичному синтаксису, Kotlin может сократить временные рамки сборки на уровне до 30%.

Факт 3. Согласно бенчмаркам, Kotlin показывает себя весьма конкурентоспособно по сравнению с Java в плане производительности во время выполнения.

Факт 4. Kotlin использует механизм сборки мусора от JVM, что иногда может приводить к более длительным паузам по сравнению с языками, использующими более продвинутые алгоритмы сборки мусора.

 

Разработка на Flutter и разработка на Kotlin: Суммируем

Запуск

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

Время выполнения 

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

Память

Kotlin обычно требует меньше памяти по сравнению с Flutter, так как не возникает затрат на выполнение Dart и фреймворка Flutter.

 

Kotlin или Flutter. Сообщества и экосистемы 

И Flutter, и Kotlin имеют в активе профессиональные сообщества, разбросанные по всей планете. То же утверждение относится к их экосистем. Тем не менее, и здесь есть некоторые тонкости, на которые следует обратить внимание при рассмотрении проекта по разработке приложения:  

  1. Когда речь заходит о Kotlin, первое, что приходит на ум — его официальное сообщество. На этой площадке инженеры могут задавать вопросы, делиться накопленным опытом и подробно обсуждать профессиональные темы. Кроме того, существуют активные группы по Kotlin на таких платформах, как Reddit, Stack Overflow и GitHub;

  2. Когда в фокус попадает Flutter, то, помимо специализированных сообществ на тех же платформах (которые нетрудно загуглить), выделим ивенты Flutter Live, их хакатоны и семинары от Google. Каждое мероприятие проводится на высоком уровне, предоставляя инженерам множество возможностей обсудить свежие приемы и пообщаться друг с другом.

Обращаясь к экосистемам, мы в Chillicode обратили бы внимание на следующие моменты: 

Экосистема Kotlin

Экосистема Flutter 

Пункт № 1. Разработка на Android 


Kotlin — это мощный инструмент для разработки приложений под Android. 

Пункт № 1. Кроссплатформенный инжиниринг 


Flutter представляет собой всеобъемлющий инструментарий для создания пользовательских интерфейсов и разработки кроссплатформенных приложений, которые компилируются в нативный код.

Пункт № 2. Серверная сторона 


Кроме того, Kotlin применяется для инженерных задач на серверной стороне с использованием таких фреймворков, как Ktor и Spring Boot.

Пункт № 2. Библиотеки и пакеты


Flutter располагает обширной экосистемой пакетов и плагинов, доступных на pub.dev. Они предоставляют широкий спектр функциональности, включая управление состоянием, сетевое взаимодействие, доступ к БД и многое другое

Пункт № 3. Библиотеки и пакеты


Kotlin имеет обширную экосистему библиотек и фреймворков для различных целей, включая доступ к базам данных, внедрение зависимостей и анализ JSON.

Пункт № 3. Инструменты

Flutter получает должную поддержку от ряда инженерных инструментов, таких как Visual Studio Code, IntelliJ IDEA и Android Studio

Пункт № 4. Инструменты


Когда речь заходит об инструментах, в Chillicode мы предпочитаем использовать IntelliJ IDEA, Android Studio и Gradle.

Пункт № 4. Firebase 


Flutter тесно интегрирован с Firebase, что обеспечивает удобство создания и масштабирования приложений. Это включает в себя различные сервисы, такие как аутентификация пользователей, облачное хранилище и функции, что значительно облегчает процесс разработки и управления приложениями.

 

Говоря об экосистемах, мы не можем не упомянуть Kotlin Multiplatform. Kotlin Multiplatform (KMP) представляет собой революционный инструмент, открывающий новые горизонты для разработчиков. Он дает использовать общий код на различных платформах, включая Android, iOS и веб. Это позволяет задать общую бизнес-логику, модели данных и служебные функции, которые могут быть применены на разных платформах, что существенно сокращает дублирование кода и упрощает его сопровождение. Kotlin Multiplatform является мощным инструментом для создания кроссплатформенных приложений с высокой эффективностью.

Kotlin Multiplatform включает в себя следующие модули:

  1. Стандартный модуль, содержащий общий код, который используется на всех целевых платформах;

  2. Модули, специфичные для платформ, содержащие код, который зависит от конкретной площадки. Например, код на Kotlin/Native для iOS и Kotlin/JVM для Android, а также других платформ, работающих на базе JVM.

Примеры кода с Kotlin Multiplatform

Общий код

Код под Android 

Код под iOS

// common/src/commonMain/kotlin/com/example/shared/Calculator.kt


package com.example.shared


expect class Calculator() {

    fun add(a: Int, b: Int): Int

}



// androidApp/src/main/kotlin/com/example/androidApp/CalculatorAndroid.kt


package com.example.androidApp


actual class Calculator actual constructor() {

    actual fun add(a: Int, b: Int): Int {

        return a + b

    }

}



// iosApp/src/iosMain/kotlin/com/example/iosApp/CalculatorIos.kt


package com.example.iosApp


actual class Calculator actual constructor() {

    actual fun add(a: Int, b: Int): Int {

        return a + b

    }

}



Поддержка платформ 

Kotlin и Flutter — мощные технологии, в пределах поддержки соответствующих платформ:

Kotlin:

  • Google официально признает Kotlin основным языком для разработки мобильных решений для Android;

  • Kotlin/Native дает компилировать код Kotlin в машинный код для iOS, что позволяет создавать приложения для этой платформы. Однако его поддержка iOS не так полна, как для Android, и некоторые специфические для платформы API и функции могут быть не полностью доступны;

  • Kotlin/JS позволяет компилировать код Kotlin в JavaScript, что дает возможность создавать веб-решения. Kotlin/JS поддерживает такие популярные веб-фреймворки, как React и Vue.js;

  • Kotlin также используется для разработки серверных приложений с помощью таких фреймворков, как Ktor и Spring Boot. Этот язык программирования позволяет создавать серверные службы и API, которые доступны через мобильные, веб- и настольные приложения;

  • Kotlin Multiplatform предоставляет возможность разработчикам совместно использовать код на различных платформах, используя единую унифицированную кодовую базу. Этот инструмент позволяет создавать общую бизнес-логику, модели данных и служебные функции, которые могут быть использованы на нескольких платформах.

Flutter: 

  • Google официально поддерживает Flutter как набор инструментов пользовательского интерфейса с открытым исходным кодом для создания компилируемых приложений для платформы Android;

  • Flutter также обеспечивает расширенную поддержку для создания компилируемых приложений на iOS. Используя общую кодовую базу, он позволяет разработчикам написать приложение один раз и запустить его как на Android, так и на iOS;

  • Flutter также предлагает экспериментальную поддержку для разработки веб-приложений с использованием веб-фреймворка Flutter. Это позволяет компилировать код Flutter в JavaScript для создания веб-решений;

  • Аналогично, Flutter имеет экспериментальную поддержку для создания десктоп-приложений под Windows, macOS и Linux с помощью среды Flutter Desktop;

  • Кроме того, Flutter имеет пробную поддержку для встроенных решений и решений IoT-типа через платформу Flutter Embedded.

Итак: 

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

  • С другой стороны, Flutter также обеспечивает широкую совместимость с платформами. Он официально поддерживается для Android и iOS, экспериментирует с веб-разработкой, десктоп- и встроенным ПО. Это позволяет разработчикам создавать кроссплатформенные приложения с уникальным дизайном из единой кодовой базы.

Обучение и продуктивность

Обсудим тонкости обучения и тот объем усилий, который нужно инвестировать в работу с обоими вариантами.

Kotlin

Кривая обучения: ключевые факторы

Владение Java

Если инженер уже знаком с Java, освоить Kotlin относительно несложно, ведь обе альтернативы совместимы. Синтаксис Kotlin более краток и современен, чем Java, что облегчает его изучение для некоторых молодых IT-специалистов

Возможности функционального программирования

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

Доступность обучения

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

Flutter 

Dart

Flutter использует Dart в качестве языка программирования. Инженерам, не знакомым с Dart, может потребоваться некоторое время, чтобы освоить его синтаксис и функциональные возможности

Разработка пользовательских интерфейсов на основе виджетов

Подход Flutter к разработке UI основан на виджетах, что может потребовать от специалистов по ПО профессиональной адаптации

Доступность обучения

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

 

Применительно к каждодневной продуктивности, ситуация может меняться. Однако, выделим эти факторы: 

  • Используя Kotlin, вы выигрываете, во-первых, от краткости его синтаксиса, во-вторых, от совместимости с Java, в-третьих, от «Null Safety» и, наконец от сопрограмм;

  • Что касается Flutter, инженеры выигрывают благодаря функции горячей перезагрузки, единым базам кода и готовым для использования виджетам.

В количественном отношении, эти свойства могут повлиять на ход проекта:

  1. Инженеры от мира Kotlin рапортуют об уменьшении размера кодовой базы примерно на 40-50% (по сравнению с Java). Кроме того, Kotlin помогает снизить число ошибок при выполнении кода примерно на 33% по сравнению с Java;

  2. Более 70% инженеров утверждают, что Flutter помогает им создавать приложения быстрее, чем другие платформы. Кроме того, специалисты, использующие Flutter, отмечают сокращение объемов написанного кода примерно на 30-40%.

Для чего использовать Kotlin и Flutter 

Kotlin и Flutter завоевали прочное признание в мире теха и используются в различных сферах деятельности, в многочисленных отраслях. Универсальность Kotlin делает его подходящим вариантом для приложений на Android, для backend, на вебе и в рамках data-проектов. С другой стороны, сила Flutter заключается не только в разработке кроссплатформенных мобильных приложений, но охватывает тот же веб, десктоп и встроенное ПО.

Для Kotlin

Для Flutter 

  1. Kotlin стал предпочтительным языком для разработки приложений под Android; благодаря полной совместимости с Java и современным функциям;

  2. Kotlin также можно использовать для серверной разработки благодаря Ktor и Spring Boot;

  3. Kotlin можно скомпилировать в JavaScript, что делает его пригодным для веба;

  4. Kotlin набирает обороты в сфере Data Science, все благодаря лаконичному синтаксису и фичам для функционального программирования.

  1. Flutter в основном используется для разработки кроссплатформенных приложений;

  2. Flutter также можно использовать для веба, хотя он не так развит в этой области, как другие платформы;

  3. Flutter поддерживает разработку десктоп-приложений под Windows, macOS и Linux (пусть этот потенциал все еще в начальном состоянии);

  4. К Flutter можно прибегать при работе над встроенным ПО и IoT из-за его компактности и оптимизированности.



Примеры решений на Kotlin (в той или иной степени) 

Примеры решений на Flutter (в той или иной степени) 

Trello — популярный инструмент для управления проектами, который помогает организовать задачи и рабочие процессы

Alibaba — eCommerce-гигант родом из КНР

Evernote — приложение для создания заметок

Google Ads — площадка для создания и настройки интернет-рекламы

Slack — место для командной работы

Groupon — известный проект в сфере электронной коммерции и маркетингового продвижения

Заключение

Kotlin — это универсальная и вполне себе «модная» технология, обычно используемая для разработки приложений под Android. Ее все чаще применяют для серверной части и веба, а также на проектах в сфере Data Science. Благодаря совместимости с Java и современным функциям, Kotlin дает разработчикам работоспособную и эффективную базу.

С другой стороны, Flutter — это мощная среда, дающая шанс воспользоваться всеми преимуществами кроссплатформенной разработки. В зоне досягаемости и Android, и iOS, все на единой кодовой базе. Благодаря функции hot reload, пакету настраиваемых виджетов и растущей экосистеме, Flutter открывает скоростную дорогу к эффективному и вовлекающему UX.

Как бы то ни было, выбор между Kotlin и Flutter, в конечном итоге, зависит от особенностей IT-проекта, компетенций команды и личных предпочтений ее членов.

 

Напишите нам

Поможем разобраться что нужно твоему бизнесу и подберем
лучшие IT-решения для результата

Подписка на нашу рассылку

Станьте одним из первых, кто будет в курсе новостей

Напишите нам

Привет, меня зовут
и я работаю в сфере
Я работаю в компании
ProjectЯ бы хотел обсудить
BudgetВаш бюджет
Несколько слов о проекте:
Напишите ответ на мой e-mail
или позвоните мне