Что такое Dart и как он появился

Dart был представлен Google в 2011 году как замена JavaScript для веб-разработки. Изначально планировалось, что браузеры будут встраивать Dart VM, что позволило бы достичь более высокой производительности. Однако этот план не сработал, и Dart переориентировался.
Настоящий прорыв для Dart произошел в 2017 году с анонсом Flutter — фреймворка для создания кроссплатформенных мобильных приложений. Flutter использует Dart в качестве основного языка, и благодаря ему популярность Dart резко выросла. Сегодня Dart — это язык не только для Flutter, но и для веб-разработки (через компиляцию в JavaScript) и для серверов.
Ключевые особенности Dart
- Машинный код (iOS, Android, Windows, macOS, Linux) через Flutter
- JavaScript (для веб-приложений)
- Собственные исполняемые файлы (для консольных утилит)
Синтаксис Dart: примеры кода
Dart имеет знакомый синтаксис для разработчиков с опытом в C, Java, JavaScript. Рассмотрим основные конструкции.
Переменные и типы данных
// Явное указание типа
String name = "Мир";
int age = 30;
double pi = 3.14159;
bool isActive = true;
// Вывод типа (var, final, const)
var message = "Hello, Dart"; // тип выводится как String
final greeting = "Привет"; // константа времени выполнения
const piConst = 3.14159; // константа времени компиляции
// Null safety: переменная не может быть null
String surname = "Иванов";
// surname = null; ❌ Ошибка!
// Nullable переменная (может быть null)
String? middleName = null;
middleName = "Петрович"; // ✅
Функции
// Простая функция
int add(int a, int b) {
return a + b;
}
// Сокращенный синтаксис (expression body)
int multiply(int a, int b) => a * b;
// Необязательные именованные параметры
void greet({required String name, int age = 0}) {
print("Привет, $name! Тебе $age лет.");
}
// Вызов
greet(name: "Анна", age: 25);
greet(name: "Олег"); // age будет 0
// Функции как объекты первого класса
List numbers = [1, 2, 3, 4];
numbers.forEach((num) => print(num));
Классы и объекты
class Person {
// Поля
String name;
int age;
// Конструктор (сокращенный синтаксис)
Person(this.name, this.age);
// Именованный конструктор
Person.fromBirthYear(this.name, int birthYear) : age = DateTime.now().year - birthYear;
// Метод
void introduce() {
print("Меня зовут $name, мне $age лет.");
}
// Геттер
int get yearsUntilRetirement => 65 - age;
}
void main() {
var person = Person("Иван", 30);
person.introduce(); // "Меня зовут Иван, мне 30 лет."
var young = Person.fromBirthYear("Мария", 2000);
young.introduce();
}
Асинхронность
// Асинхронная функция, возвращающая Future
Future fetchUserData() async {
await Future.delayed(Duration(seconds: 2)); // симуляция запроса
return "Данные пользователя";
}
// Использование с async/await
void main() async {
print("Загрузка...");
String data = await fetchUserData();
print(data);
}
// Работа со Stream (поток событий)
Stream countStream(int max) async* {
for (int i = 1; i <= max; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}
void main() async {
await for (int value in countStream(5)) {
print(value);
}
}
Dart и Flutter: идеальная пара
Dart — это язык, на котором написан Flutter, и он же используется для создания приложений на Flutter. Почему Google выбрала Dart для Flutter?
- JIT и AOT компиляция — во время разработки используется JIT с горячей перезагрузкой (Hot Reload), позволяющей видеть изменения за миллисекунды. В релизной сборке — AOT компиляция в машинный код для максимальной производительности.
- Управление памятью без GC пауз — Dart использует сборщик мусора с поколениями, но оптимизирован для плавной анимации (без длительных пауз).
- Простота обучения — Dart легко освоить разработчикам с опытом в Java, JavaScript, C#.
- Одна кодовая база для всех платформ — iOS, Android, веб, Windows, macOS, Linux.
Пример простого Flutter-приложения на Dart:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Мое приложение')),
body: Center(
child: Text('Привет, Flutter!'),
),
),
);
}
}
Преимущества и недостатки Dart
✅ Преимущества
- Null safety — значительно уменьшает количество ошибок времени выполнения.
- Горячая перезагрузка (Hot Reload) — ускоряет разработку на Flutter в разы.
- Единая кодовая база — одно приложение для всех платформ.
- Высокая производительность — сравнима с нативными языками благодаря AOT.
- Предсказуемый синтаксис — Dart не пытается быть слишком умным, код легко читается.
- Быстрая экосистема — pub.dev содержит тысячи библиотек, активно растущих.
- Поддержка Google — Dart и Flutter активно развиваются (релизы каждые 3-4 месяца).
❌ Недостатки
- Меньшая популярность вне Flutter — Dart редко используется для веба или бэкенда вне контекста Flutter.
- Меньше библиотек, чем у JavaScript/Python — хотя ситуация быстро улучшается.
- Ограничения в веб-разработке — компиляция в JavaScript увеличивает размер бандла.
- Рост популярности только за счет Flutter — вне мобильной разработки Dart пока слаб.
Dart вне Flutter
Хотя Dart известен прежде всего как язык Flutter, у него есть и другие применения:
🌐 Веб-разработка
Dart может компилироваться в JavaScript (dart2js) и использоваться для создания веб-приложений. Фреймворки: AngularDart (устаревший), OverReact, или просто работа с dart:html. Однако в вебе Dart значительно уступает TypeScript и JavaScript по популярности.
⚙️ Серверная разработка
Dart может выполняться на сервере через Dart VM. Фреймворки: Dart Frog, Alfred, Angel. Для небольших серверов и API это viable опция, но экосистема значительно меньше, чем у Node.js или Python.
🖥️ Консольные утилиты
Dart отлично подходит для написания скриптов и CLI-инструментов. Пример: dart run позволяет выполнять Dart-скрипты как обычные программы.
📱 Мультиплатформенные десктоп-приложения
Flutter Desktop (Windows, macOS, Linux) позволяет создавать нативные десктоп-приложения на Dart.
Инструменты и экосистема
📦 Pub — менеджер пакетов
pub.dev — официальный реестр пакетов для Dart и Flutter. Тысячи библиотек для самых разных задач: HTTP, базы данных, шифрование, парсинг, тестирование и т.д.
🔧 Командная строка (Dart CLI)
После установки Dart SDK доступны команды:
dart run— запуск Dart-скрипта.dart compile— компиляция в исполняемый файл (exe).dart format— автоматическое форматирование кода.dart analyze— статический анализ кода.dart test— запуск тестов.
💻 IDE
- Android Studio / IntelliJ IDEA — с плагином Dart/Flutter (рекомендуется).
- VS Code — легковесный редактор с отличной поддержкой Dart через расширение.
- DartPad — онлайн-редактор (dartpad.dev) для экспериментов.
Как начать изучать Dart
- Установите Dart SDK — скачайте с dart.dev/get-dart или используйте менеджеры пакетов (brew, chocolatey, apt).
- Настройте IDE — VS Code или Android Studio с плагином Dart.
- Изучите основы — переменные, типы, функции, классы, асинхронность.
- Попрактикуйтесь на DartPad — dartpad.dev позволяет писать и запускать Dart-код без установки.
- Освойте null safety — ключевое отличие Dart от многих языков.
- Изучите коллекции и функциональные методы — map, where, fold, expand.
- Познакомьтесь с Future и Stream — асинхронное программирование.
- Если цель — Flutter — после основ Dart переходите к изучению Flutter.
Будущее Dart
Dart активно развивается. Планы на ближайшие годы:
- Dart 3.x — новые фичи, улучшение производительности.
- Улучшение поддержки WebAssembly — компиляция Dart в Wasm для веб-приложений.
- Расширение экосистемы — рост количества пакетов на pub.dev.
- Улучшение макроподдержки (macros) — метапрограммирование на этапе компиляции.
- Дальнейшая интеграция с Flutter — совместная эволюция языка и фреймворка.
Будущее Dart тесно связано с Flutter. Пока Flutter растет (а он растет быстрыми темпами), Dart будет оставаться востребованным языком.
Заключение
Dart — это современный, безопасный и производительный язык, который заслуживает внимания. Даже если вы не планируете использовать Flutter, Dart может быть отличным выбором для серверных приложений или консольных утилит, особенно если вы цените null safety, удобный синтаксис и хорошую производительность.
Но главная сила Dart — в Flutter. Если вы хотите разрабатывать мобильные приложения для iOS и Android из одной кодовой базы, создавать десктопные приложения для Windows, macOS и Linux или даже веб-приложения — Flutter + Dart лучший выбор на 2026 год.
Начните изучение Dart уже сегодня — установите Dart SDK, откройте DartPad и напишите свою первую программу. Сообщество Dart дружелюбно, документация отличная, а результат не заставит себя ждать.
Автор: Александр
Дата публикации:




