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. Курс English For Tech course від Enlgish4IT.
    Лише 7 тижнів по 20-30 хвилин щоденного навчання допоможуть вам подолати комунікативні бар'єри. Отримайте знижку 10% за промокодом ITCENG.
    Дійзнайтеся більше
  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 або будь-якого іншого рушія. 

Курс-професія "Дизайнер інтер'єрів" від Skvot.
Велика практична програма для всіх, хто хоче засвоїти професію дизайнера інтер'єрів і заробляти на реальних проєктах відразу після курсу. Досвідом та інсайтами діляться одразу три лектори.
Програма курсу

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

Курс-професія "Копірайтер" від Skvot.
40 занять — і ти з упевненістю, скілами та портфоліо зможеш тиснути Apply на вакансії копірайтера.Досвідом і ключами поділяться 2 лекторки та запрошені спікери.
Детальніше про курс

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

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

Онлайн-курс "Computer Vision" від robot_dreams.
Застосовуйте Machine Learning / Deep Learning та вчіть нейронні мережі розпізнавати об’єкти на відео. Отримайте необхідні компетенції Computer Vision Engineer.
Дізнатись більше про курс

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

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

Онлайн-курс "Комерційний Аудіопродакшн" від Skvot.
Навчіться створювати, зводити й мастерити музику для комерційних проєктів — кіно, серіалів, улюблених ігр чи вірусних рекламних роликів.
Детальніше про курс та довід лектора

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

Топ-5 найпопулярніших блогерів березня

PHP Developer в ScrumLaunch
Всего просмотровВсього переглядів
2434
#1
Всего просмотровВсього переглядів
2434
Founder at Shallwe, Python Software Engineer (Django/React)
Всего просмотровВсього переглядів
113
#2
Всего просмотровВсього переглядів
113
Career Consultant в GoIT
Всего просмотровВсього переглядів
95
#3
Всего просмотровВсього переглядів
95
CEO & Founder в Trustee
Всего просмотровВсього переглядів
94
#4
Всего просмотровВсього переглядів
94
Рейтинг блогерів

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

Топ текстів

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

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

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