Свого часу ми вже розповідали про переваги Flutter. Це фреймворк, який дозволяє з легкістю створювати кросплатформні мобільні застосунки, які мають чудовий вигляд і майже не поступаються за швидкодією нативним розробкам.
Та сьогодні ми б хотіли поговорити про Dart — мову програмування, яка робить Flutter таким, яким він є. Коротко та без води розповімо про особливості та переваги Dart, поділимося досвідом роботи та корисними для джунів матеріалами.
Технічно Dart народився на світ у 2011 році у нетрях Google. В ті часи ЗМІ любили писати, що Google має намір «вбити» JavaScript, та й самі розробники Dart любили говорити на презентаціях про «фундаментальні недоліки» JS.
Що ж, вбити JavaScript врешті не вийшло, але сьогодні Dart позиціюється як універсальна client-side-мова, яка може як працювати як з власною віртуальною машиною на нативних платформах, так і компілюватись у JS.
Це вкрай зручна мова для світу, де паралельно існують безліч платформ: десктопи, мобайл, веб. Скажімо, веброзробники можуть легко опанувати її та повторно використовувати більшу частину коду під різні системи — Android, IOS та MacOS, Windows, Ubuntu.
Сьогодні про Dart кажуть і як про мову для IoT-пристроїв, і як про мову для бекенду, хоча там і без нього висока конкуренція.
Ми говоримо про типізовану C-подібну мову програмування, а отже синтаксис Dart дуже подібний до JS. Та при цьому система типів у Dart не надто розгалужена і спершу може здатися «бідною».
Насправді Dart входить до відносно рідкісної категорії soundness-мов: йдеться тут не про звуки, а про пріоритет здорового глузду у роботі з типами, тобто відсутність внутрішніх суперечностей. Наприклад, якщо у вас є змінна типу int
, то вона гарантовано буде залишатися з типом int
. Це суттєва відмінність від JS, де типи можна приводити одне до одного.
На офіційному сайті Dart цю модель називають sound type system, і наводять такі переваги:
Окремо можемо виділити також реалізований у Dart null-safety: змінна не може бути нулем, якщо тільки розробник власними руками не визначив протилежне.
Dart сприймається інтуїтивно і не потребує такої розгалуженої системи типів, яка є, наприклад, в TypeScript. Можна сприймати це як запобіжник, який заважає вам вистрілити собі в ногу 🙂
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 або мігрує на нього? Які тут підводні камені? Нічого критичного, але про деякі речі варто сказати.
Flutter — це єдиний великий фреймворк на Dart, і це проблема. Яким би зручним та потужним не був Flutter, це лише один інструмент, і його замало. Dart-ком’юніті могло б розвиватися набагато швидше, якби у Flutter з’явилися поплічники й конкуренти, та наразі їх не видно (якщо не враховувати Angular Dart, який, на жаль, не вистрілив).
Екосистема Flutter розвивається швидко, але за швидке зростання силами малої команди доводиться платити численними багами.
Це важлива особливість, ніж недолік, але Dart — номінально однопотокова мова. Багатопотокові мови в теорії дозволяють використовувати ресурси заліза набагато ефективніше, але потребують від розробників майстерності. Водночас однопотокові мови прості та лаконічні, що грає на користь в циклах розробки.
Насправді у Dart є можливості роботи з багатопотоковістю — через модель ізолятів. Якщо говорити у двох словах, це полегшені потоки, які мають відокремлену пам’ять та пов’язані між собою лише в обмеженому форматі. Не можна сказати, що ізоляти — це зовсім рідкісна практика, але більшість проєктів на Flutter сьогодні обходяться без них. Адже вам не потрібні чудеса швидкодії у застосунку для замовлення піци.
Ви скажете, що це ключова перевага Dart, й матимете рацію. Однак безліч платформ, на які орієнтується Flutter, диктують до розробників додаткові вимоги: їм доведеться здобути базові уявлення про принципи та особливості цих платформ. Це найбільша складність, з якою при переході на Flutter стикаються веброзробники.
Отже, ви вирішили вивчити Dart/Flutter, чи вам треба швидко опанувати його. З чого почати:
Flutter став для нас ключовим інструментом розробки кросплатформових мобільних застосунків — ми цінуємо його гнучкість, доступність та технологічність.
Стрімке поширення Flutter працює на ком’юніті та стимулює розвиток Dart. Тож ми віримо, що проєктів на ньому буде ставати все більше — і не лише в мобайлі, але й у вебі. Впевнені: надалі він може здобути собі місце і в бекенді, і на десктопних системах.
Днями я завзято нила про щось ChatGPT (експериментую між сеансами з живим терапевтом). І от…
«Крутіть колесо, щоб отримати знижку до 50%!» «Натисніть тут, щоб відкрити таємничу пропозицію!» «Зареєструйтесь зараз,…
Дуже хочеться робити якісь десктопні апки. Сумую за часами коли всі програми були offline-first, і…
Надсилаючи криптовалюту, багато новачків ставлять запитання: як працюють комісії та чому вони відрізняються в різних…
Нова афера набирає обертів — ось детальний розбір того, як фальшиві потенційні роботодавці намагаються вкрасти…
Соцмережа з можливістю вбудовувати повноцінні додатки прямо в пости — звучить як фантастика, але Farcaster…