ru:https://highload.today/blogs/ubit-javascript-ne-poluchilos-za-chto-my-lyubim-dart-yazyk-sozdaniya-prilozhenij-na-flutter-i-komu-on-podhodit/ ua:https://highload.today/uk/blogs/za-shho-my-lyubymo-dart-golovnu-ta-yedynu-movu-stvorennya-dodatkiv-na-flutter/
logo

«Убить JavaScript не получилось»: за что мы любим Dart — язык создания приложений на Flutter (и кому он подходит)

Сергій Гузенко BLOG

CEO у WEZOM

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

Но сегодня мы хотели бы поговорить о Dart — языке программирования, который делает Flutter таким, каким он есть. Кратко и без воды расскажем об особенностях и преимуществах Dart, поделимся опытом работы и полезными для джунов материалами.

Немного контекста

Технически Dart появился в 2011 году в дебрях Google. В те времена СМИ любили писать, что Google намерена «убить» JavaScript, да и сами разработчики Dart любили говорить на презентациях о «фундаментальных недостатках» JS. 

Что ж, убить JavaScript не получилось, но сегодня Dart позиционируется как универсальный client-side-язык, который может как работать как с собственной виртуальной машиной на нативных платформах, так и компилироваться в JS.

Это очень удобный язык для мира, где параллельно существует множество платформ: десктоп, мобайл, веб. Веб-разработчики могут легко ее изучить и повторно использовать большую часть кода под разные системы — Android, IOS и MacOS, Windows, Ubuntu. 

Сегодня о Dart говорят и как о языке для IoT-устройств, и как о языке для бэкенда, хотя там и без него высока конкуренция. 

Принципи Dart  

Мы говорим о типизированном C-образном языке программирования, а значит, синтаксис Dart очень похож на JS. Но при этом система типов у Dart не слишком разветвленная и сначала может показаться «бедной».

На самом деле Dart входит в относительно редкую категорию soundness-языков: речь идет здесь не о звуках, а о приоритете здравого смысла в работе с типами, то есть отсутствии внутренних противоречий. К примеру, если у вас есть переменная типа int, то она гарантированно будет оставаться с типом int. Это существенное отличие от JS, где типы можно приводить друг к другу. 

На официальном сайте Dart эту модель называют sound type system, и приводят следующие преимущества:

  1. Своевременное выявление связанных с типами багов при компиляции. 
  2. Онлайн-інтенсив "Causal Modeling — причини, наслідки та кореляція" від robot_dreams.
    Опануйте розробку каузальних моделей на практиці з експертом Кремнієвої долини, щоб самостійно виконувати обчислення причинно-наслідковості мовою Python.
    Приєднатись
  3. Лучше читаемый код (ведь типы не могут вам «лгать»).
  4. Удобство поддержки кода — если вы изменяете один фрагмент, система типов может предупредить вас о других фрагментах, которые только что сломались из-за вашей правки.
  5. Улучшенная AOT-компиляция. Хотя AOT можно производить и без типов, сгенерированный таким образом код будет менее эффективным. 

Отдельно можем выделить также реализуемый в Dart null-safety: переменная не может быть нулем, если только разработчик собственными руками не определил обратное. 

Dart воспринимается интуитивно и не нуждается в такой разветвленной системе типов, которая есть, например, в TypeScript. Можно воспринимать это как предохранитель, мешающий вам выстрелить себе в ногу 🙂

Как работает Dart 

Dart может работать нативно через собственную виртуальную машину DartVM, которая хорошо сочетает преимущества компиляции JIT (Just in time) и AOT (Ahead of time).

JIT — это компиляция кода на лету, тогда как AOT — это работа на опережение с уже скомпилированным кодом.

При разработке на Flutter Dart предоставляет характерную для JIT опцию hot reload, что ускоряет всю работу и помогает отлавливать баги. Но при развертывании продукта он также предоставляет возможности AOT-компиляции (например, под ARM или x64), чтобы конечный продукт был стабильным и работал быстро. При этом Flutter предоставляет в скомпилированный код определенный рантайм, чтобы обеспечить сбор мусора и избежать проблем с типами.

В то же время Dart может с легкостью интерпретироваться и в JavaScript, то есть превращаться в код, который можно открыть в любом браузере. Компиляция под веб происходит по пайплайнам V8 или любому другому движущему устройству. 

Онлайн-курс Frontend-разробник від Powercode academy.
Курс на якому ти напишеш свій чистий код на JavaScript, попрацюєш із різними видами верстки, а також адаптаціями проектів під будь-які екрани. .
Зарееструватися

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

За что мы любим Dart?

  • Легкий в изучении. Если у вас есть определенный опыт с JS или Rust, изучение Dart не составит для вас никакой проблемы. Синтаксис будет интуитивно понятен и очевиден. Следовательно, на адаптацию понадобится буквально две-три недели.
  • Делает возможным Hot Reload. Это некая магия, полностью меняющая ваш опыт разработки. Ведь вы можете вживую видеть, как изменения в коде влияют на визуал и функционал того, что вы создаете.
  • Есть документация и инструменты. Разработчики сделали все, чтобы вам не пришлось проводить шаманские ритуалы и искать ответы в дебрях Stack Overflow и Github. Это не значит, что вы не будете этого делать, но в целом ваши поиски будут безболезненными.
  • Доступный. Никакой проприетарности: инструменты для разработки доступны практически на всех десктопных системах — Windows, MacOS, Ubuntu. Почти всюду доступны эмуляторы Android и IOS. Для работы подойдет большинство распространенных IDE — Visual Studio Code или Android Studio.
  • Помогает улучшать UI. Ведь речь идет о client-side-языке, нацеленном на работу с визуалом и анимациями. В Dart есть множество функций для борьбы с микролагами и дерганием в работе интерфейсов. Обычно приложения на Flutter работают плавно и выглядят приятно.

Какие сложности возникают из Dart? 

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

Dart = Flutter

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

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

Курс QA Manual (Тестування ПЗ мануальне) від Powercode academy.
Навчіться знаходити помилки та контролювати якість сайтів та додатків.
Записатися на курс

Однопоточность

Это немаловажная особенность, чем недостаток, но Dart — номинально однопоточная речь. Многопоточные языки в теории позволяют использовать ресурсы железа гораздо эффективнее, но требуют от разработчиков мастерства. Одновременные языки просты и лаконичны, что играет на пользу в циклах разработки. 

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

Кроссплатформенность

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

Где искать информацию и ответы

Итак, вы решили изучить Dart/Flutter, нужно ли вам быстро овладеть его. С чего начать:

  1. В арто пойти на официальные сайты — Dart.dev и Flutter.dev. Документация закрывает 90% всех вопросов работы в экосистеме.
  2. Если английский позволяет, то стоит пойти на самые крупные англоязычные веб-ячейки комьюнити — Awesome Flutter и Awesome Dart на Github.
  3. Можно посетить крупнейшие Discord-сообщества, посвященные Dart и Flutter.
  4. Украинский чат на тему Dart/Flutter в Telegram — для поиска ответов, вакансий и единомышленников.

Будущее Dart

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

Курс Project Manager від Powercode academy.
Онлайн-курс Project Manager. З нуля за 3,5 місяці до нової позиції Без знання коду, англійської та стресу.
Зарееструватися

Стремительное распространение Flutter работает на комьюнити и стимулирует развитие Dart. Поэтому мы верим, что проектов на нем будет становиться все больше — и не только в мобайле, но и в интернете. Уверены: в дальнейшем он может заполучить себе место и в бэкенде, и на десктопных системах. 

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.

Курс UI/UX дизайну від Mate academy.
Допоможемо швидко освоїти базові знання, необхідні для того, щоб отримати першу роботу у сфері UI/UX дизайну. Після закінчення курсу ви отрмаєте сертифікат та допомогу з працевлаштуванням.
Дізнатися більше про курс

Этот материал – не редакционный, это – личное мнение его автора. Редакция может не разделять это мнение.

Ваша жалоба отправлена модератору

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: