«Вбити JavaScript не вийшло»: за що ми любимо Dart — мову створення застосунків на Flutter (та кому вона підходить)

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

Свого часу ми вже розповідали про переваги 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. Код, який краще читається (адже типи не можуть вам «брехати»).
  3. Зручність підтримки коду — якщо ви змінюєте один фрагмент, система типів може попередити вас про інші фрагменти, які щойно зламались через вашу правку.
  4. Покращена 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 або будь-якого іншого рушія. 

Така гнучкість в компіляції робить 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 розвивається швидко, але за швидке зростання силами малої команди доводиться платити численними багами. 

Однопотоковість

Це важлива особливість, ніж недолік, але 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 став для нас ключовим інструментом розробки кросплатформових мобільних застосунків — ми цінуємо його гнучкість, доступність та технологічність.

Стрімке поширення Flutter працює на ком’юніті та стимулює розвиток Dart. Тож ми віримо, що проєктів на ньому буде ставати все більше — і не лише в мобайлі, але й у вебі. Впевнені: надалі він може здобути собі місце і в бекенді, і на десктопних системах. 

Якщо ви знайшли помилку, будь ласка, виділіть фрагмент тексту та натисніть Ctrl+Enter.

Останні статті

IT в Україні йде до свого фінального кінця. І потраплятимуть туди виключно за покликом душі

Коротко про українську IT-сферу у 2024 році Це коли на одну вакансію Middle розробника по…

26.03.2024

Блокчейн-розробка сьогодні: зарплати і перспективи на ринку праці

Формування криптовалютної галузі в Україні почалося ще у 2014 – саме тоді з'явилися перші стартапи,…

18.03.2024

Скільки рішень ухвалює розробник? Погляд новачка, який запускає продукт

Автор цього блогу — Python-девелопер Сергій Солдатов, який вирішив створити досить унікальний продукт. І це…

12.03.2024

Чи треба готуватись до співбесіди?

Думки шукачів діляться на: «так, однозначно» і «ні, не вартує, я все і так про…

04.03.2024

Відкладаєте до останнього? Що таке «синдром студента» і як з ним боротися

Синдром студента — це форма прокрастинації, яка полягає в тому, що людина, якій дали завдання,…

23.02.2024

Вчимося працювати з Git: основи конфігурації, гілки, додавання файлів та директорій

Git — це найпопулярніша CVS прямо зараз, яка дозволяє відстежувати історію розробки і спільно працювати.…

20.02.2024