Why Flutter? Почему Flutter?

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем начнем, не забудьте уволить вашего CTO/Тимлида, если вы до сих пор не используете Flutter.

Кто я такой и зачем пишу эту статью?

Меня зовут Адрианов Алексей и я пишу на Flutter с первого релиза (декабрь 2018). За эти 5 лет я реализовал 4 коммерческих продукта различной направленности, участвовал в двух стартапах на старте карьеры, а также реализовал примерно десяток приложений “для себя”. Кроме того, имею большой опыт в собеседовании кандидатов на позиции в разные компании и оценке знаний сотрудников на основе собственной грейдовой сетки.

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

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

Так что же такое Flutter? В 2024 году многие уже слышали о нем, поэтому сильно вдаваться в определение не буду, но для тех, кто сталкивается с ним в первый раз, вот краткая справка. Flutter - мультиплатформенный фреймворк компании Google, который позволяет разрабатывать приложения любой сложности (говорю из личного опыта), делая большой акцент на визуальной составляющей.

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

Dart

О языке

Итак, начнем с основ. Если вы знаете хоть один С-подобный язык, то Dart не станет чем-то сложным. Язык учится быстро и спустя неделю, а то и несколько дней изучения Language Tour вы сможете без проблем заниматься разработкой.

Разработчик через неделю изучения Dart (это я)
Разработчик через неделю изучения Dart (это я)

Кроме того, команда разработки Dart работает совместно с командой Flutter, что позволяет языку соответствовать требованиям фреймворка (например, spread operator), регулярно обновляться и обзаводиться новыми фишками и синтаксическим сахаром.

Часто встречаемая фраза “Это же детище Google, когда-то они его точно забросят” не была бы такой забавной, если бы Google не был основным мейнтейнером андроида (just think about it). Теоретически, возможно все, что угодно: даже мордокнига (запрещенная в России организация) может забросить RN и уйти во Flutter. Dart активно развивается, что говорит о серьезном настрое разработчиков в отношении платформ, поэтому в ближайшие годы точно не стоит ожидать закрытия проекта. Кроме того, большое количество приложений с использованием Flutter публикуются в сторы.

Злостные ненавистники Dart в качестве аргумента против использования этой технологии, упоминают однопоточность. Давайте разберемся, что на самом деле это означает и почему агрессоры неправы.

Если вкратце - да, Dart однопоточный, но не совсем. Для логики, выполняемой в рамках Event Loop разработчику по прежнему стоит помнить об этом, однако, например, запросы в диск происходят через ThreadPool у DartVM, а не в EventLoop, в котором лишь ожидается получение данных.

Асинхронные операции с сокетами выполняются на главном потоке с использованием OS специфичного механизма неблокирующего I/O (epoll on Linux, kqueue on Mac, overlapped io on Windows). Сокеты OS уведомляют, когда во входящем буфере есть данные, которые можно прочитать без блокировки, или когда есть место в исходящем буфере, чтобы записать данные. Само чтение из буфера / запись в буфер осуществляется синхронным read/write syscallом на главном потоке. Это, правда, обычно быстрая операция. (Спасибо @mraleph за пояснения)

Flutter также имеет ряд потоков, которые отвечают за растеризацию и UI. Из выше сказанного можно сделать вывод, что бОльшая часть внешнеориентированного кода, который разработчик пишет на Dart почти никогда не блокирует UI так сильно, как об этом рассказываю злостные хейтеры. А если разработчик делает расчеты Фибоначчи в главном изоляте, то тут умрет что угодно. Но даже если нужно выполнить сложные операции, можно использовать изоляты (отдельные потоки), о которых ненавистники почему-то не говорят.

300px-Постой,_а_ведь_он_прав_шаблон.jpg

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

А еще не забывайте, на сколько у Dart’а прекрасная документация, в которой вы никогда не потеряетесь и найдете ответы на множество вопросов.

А если Вы разработчик на kotlin/swift/js (подставь свой язык) и не понимаете, как можно писать на Dart (ведь там есть точка с запятой и нет data-классов), то просто смиритесь с тем, что язык - это инструмент, к нему можно привыкнуть и адаптироваться.

Pub

Люди, знакомые с JS знают, как тяжело работать, когда нет единого общепризнанного источника зависимостей.

JS разработчик, пытаясь выбрать менеджер зависимостей
JS разработчик, пытаясь выбрать менеджер зависимостей

К счастью, в Dart эта проблема решена. Команда разработки языка сделала пакетный менеджер, названный Pub (уже видите связь о том, что в пабах играют в дартс?)

Чтобы добавить зависимости в проект, нужно всего лишь создать pubspec.yaml файл и указать в нем все, что вам нужно. А чтобы найти нужные пакеты или плагины (да, есть различие) достаточно зайти на официальный сайт менеджера и в поиске вбить ключевые слова. Если с экосистемой вы не знакомы, то подойдет поиск в гугле, наверняка на StackOverflow уже были подобные вопросы.

“Да там же огромное количество пакетов, чем это лучше JS?” - спросят непогруженные читатели. “Системой оценки” - отвечу я. В мире, где все быстро меняется и одни пакеты заменяют другие, не только новичку, но и опытному разработчику бывает сложно найти подходящий пакет. Но разработчики Dart учли и эту проблему. Кому-то она может показаться неидеальной, но спустя время, можно с уверенностью сказать, что эта система работает и позволяет значительно сократить время поиска пакета, если вам вдруг понадобилось что-то нестандартное, а времени копаться в исходниках, чтобы найти идеальный вариант, у вас нет.

kvn5.jpg

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

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

Источник: https://habr.com/ru/articles/787174/


Интересные статьи

Интересные статьи

Внедрение процессного подхода, совершенствование или реинжиниринг бизнес-процессов - действенные инструменты для повышения эффективности предприятий. Но не всегда они приносят желаемый результат. В эт...
Криптозаморозки на рынке продолжаются. Практически каждые несколько недель громко лопается новый криптопроект на десятки миллиардов долларов: Luna/UST, Celsius, Three Arrows Capital. Есть основания по...
Используемая сейчас архитектура разработки ИИ для распознавания изображений имеет серьёзные уязвимости, при эксплуатации которых можно серьёзно запутать компьютер, заставив его выдавать неправильные р...
Привет, Хабр! Мы — команда RapidSoft и сегодня хотим рассказать, как мы разработали и внедрили нестандартное решение системы лояльности клиентов SBI банка, как удалось в кратчайшие сроки успеть вы...
Меня зовут Валерий Шавель, я из команды разработки векторного движка Яндекс.Карт. Недавно мы внедряли в движок технологию WebAssembly. Ниже я расскажу, почему мы её выбрали, какие результаты полу...