Що за мова Dart
Dart — мова зі строгою типізацією та знайомим синтаксисом. Розробник, який писав на Java, JavaScript, C# чи Kotlin, зазвичай читає Dart-код без підготовки і досить швидко починає на ньому писати.
Мова має два режими роботи. Під час розробки код запускається так, що зміни можна побачити майже миттєво, без перезбирання застосунку. Для публікації той самий код компілюється в машинний код для телефона чи комп’ютера або в JavaScript для браузера. Тому Dart поєднує зручність розробки зі швидкою роботою готового застосунку.
Де застосовується Dart
- Мобільні застосунки на Flutter. Основна і найпоширеніша сфера.
- Веб і настільні програми на Flutter. Внутрішні панелі, інструменти для співробітників, програми для Windows, macOS та Linux.
- Утиліти та скрипти. Генерація коду, обробка файлів, допоміжні інструменти для команди розробки.
- Серверна частина. Технічно можлива, але трапляється рідко: готових бібліотек і фахівців тут значно менше, ніж для інших мов.
Переваги Dart
- Захист від порожніх значень. Мова вимагає явно вказати, де дані можуть бути відсутні, і перевіряє це ще до запуску. Через це зникає цілий клас аварійних завершень застосунку.
- Зручна робота з асинхронністю. Запити до сервера, читання файлів і інші тривалі операції записуються майже як звичайний послідовний код, без вкладених зворотних викликів.
- Ізоляти для важких обчислень. Обробку великих обсягів даних можна винести в окремий потік виконання, щоб інтерфейс не завмирав.
- Вбудовані інструменти. Аналізатор коду, автоматичне форматування, тести й менеджер пакетів входять у стандартний набір і однаково налаштовані в усіх проєктах.
Обмеження мови
- Тісний зв’язок із Flutter. Поза Flutter Dart використовують мало, тому вибір мови фактично означає вибір Flutter.
- Менше фахівців. Розробників на Dart менше, ніж на JavaScript чи Kotlin. Важливо, щоб код був зрозумілим і задокументованим, — тоді передати проєкт іншій команді буде простіше.
- Невелика екосистема поза мобільною розробкою. Для сервера, аналітики даних чи машинного навчання є мови з набагато ширшим вибором готових рішень.
- Нерівна якість пакетів. Частину пакетів підтримують окремі ентузіасти. Кожну залежність варто оцінювати перед тим, як додавати в проєкт.
Коли краще обрати іншу мову
Ми не радимо Dart заради самого Dart. Інша мова доцільніша, якщо:
- ваша команда вже пише на TypeScript і React — тоді для мобільного застосунку логічніше React Native, де можна перевикористати знання й частину коду;
- потрібен лише сервер або обробка даних — для цього краще мови з розвиненою серверною екосистемою;
- застосунок буде тільки під Android і глибоко працюватиме з системою — тоді природніший вибір Kotlin.
Перехід на сувору перевірку порожніх значень
У ранніх версіях Dart будь-яка змінна могла виявитися порожньою, і помилки через це проявлялися вже в користувачів. Згодом мова отримала сувору перевірку таких значень, а в нових версіях вона стала обов’язковою.
Для старих проєктів це означає, що без міграції вони не збираються з актуальним Flutter. Міграцію робимо поступово, пакет за пакетом: спершу оновлюємо залежності, потім переводимо власний код і перевіряємо кожне місце, де значення справді може бути відсутнім. Механічна заміна «щоб зібралося» лише ховає помилки, тому кожен такий випадок ми розбираємо окремо.
Як ми впорядковуємо Dart-код
У Flutter-проєктах, які довго розвивалися без правил, логіка часто живе прямо в екранах. Ми поступово розділяємо код на шари:
- інтерфейс — лише показує дані й передає дії користувача далі;
- логіка — правила, розрахунки, перевірки, які можна протестувати без телефона;
- дані — звернення до сервера, кеш, локальна база, синхронізація.
Таке розділення дозволяє змінювати дизайн, не чіпаючи розрахунків, і переходити на новий сервер, не переписуючи екрани. Спільні частини, потрібні кільком застосункам компанії, оформлюємо в окремі внутрішні пакети.
Тести для логіки застосунку
Коли логіка відокремлена від екранів, її можна перевіряти автоматично, без телефона і без ручного проходження сценаріїв. Тести на Dart запускаються за лічені секунди і показують, чи не зламала нова зміна розрахунок знижки, перевірку форми чи обробку відповіді сервера.
Ми не прагнемо покрити тестами кожен рядок. Насамперед тестуємо те, що коштує грошей або довіри користувачів: оплати, розрахунки, авторизацію, збереження даних. Для таких частин тести окупаються вже на перших оновленнях.
Новий код чи доопрацювання наявного
У новому проєкті з першого дня вмикаємо суворі правила аналізатора, автоматичне форматування і тести для ключових сценаріїв. Це дешевше, ніж наводити порядок потім.
У наявному проєкті не переписуємо все одразу. Спершу виправляємо те, що блокує оновлення й релізи, далі поступово розплутуємо найпроблемніші модулі, паралельно з розробкою нових функцій. Застосунок при цьому продовжує працювати й отримувати оновлення.
Що впливає на вартість
- Обсяг коду: кількість екранів, модулів і власних пакетів.
- Вік проєкту: наскільки відстали версії Dart, Flutter і залежностей.
- Наявність тестів: без них кожну зміну доводиться довше перевіряти вручну.
- Глибина змін: точкові виправлення, міграція чи перебудова архітектури.
Після аудиту ви отримуєте список проблем з пріоритетами і план робіт, поділений на етапи.
Часті запитання
Чи варто вчити Dart, якщо ми вже пишемо на JavaScript? Мова знайома за синтаксисом, тому перехід зазвичай нескладний. Але якщо ви не плануєте Flutter, сенсу в ній небагато.
Наш застосунок не збирається з новим Flutter. Що робити? Найчастіше причина в застарілих пакетах і відсутній міграції на сувору перевірку порожніх значень. Почнемо з аудиту і покажемо, скільки роботи потрібно.
Чи можна писати сервер на Dart? Можна, але для більшості проєктів ми порадимо мову з ширшою серверною екосистемою, а Dart залишимо для застосунку.
Чи візьмете на підтримку Dart-проєкт іншої команди? Так. Спершу розбираємося в коді й залежностях, а потім підтримуємо й розвиваємо застосунок на постійній основі.
Чому Promodex
З 2015 року Promodex виконав 750+ проєктів у розробці, дизайні та маркетингу. Над кодом працюють наші власні розробники в Києві, без субпідрядників. Ми не обіцяємо переписати все з нуля: спершу пояснюємо, у якому стані ваш проєкт, які зміни дадуть найбільше користі й чому саме вони. Умови прозорі — ви знаєте, що робиться і навіщо, а після завершення робіт ми залишаємося поруч для підтримки й розвитку.