UA RU
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. Онлайн- курс Java developer від Mate academy.
    Якщо ви не можете навчатись повний день, обирайте курс Java developer з гнучким графіком! Ви зможете опанувати нову професію та отримати нову роботу!
    Отримати знижку на курс
  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 або будь-якого іншого рушія. 

Основи Python для школярів від Hillel IT School.
Відкрийте для вашої дитини захопливий світ програмування з нашим онлайн-курсом "Програмування Python для школярів". Ми вивчимо основи програмування на прикладі мови Python, надаючи зрозумілі пояснення та цікаві практичні завдання.
Зареєструватися

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

Онлайн-курс "Ефективні презентації в PowerPoint" від Laba.
Навчіться доносити ідеї через актуальні візуалізації.Курс зі створення презентацій, які додивлятися до кінця.Будь то sales offer, чи pitch deck.
Дізнатись більше

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

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

Онлайн-курс UI/UX designer від Mate academy.
UI/UX designer відповідає за зручність та естетику сайтів і додатків - після закінчення курсу ви отримаєте добреоплачувану спеціальність. Працевлаштування гарантуємо. .
Отримати знижку на курс

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

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

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

Цей матеріал – не редакційний, це – особиста думка його автора. Редакція може не поділяти цю думку.

Найбільш обговорювані статті

Топ текстів

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

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

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