Главная / Технологии / Что такое Dart и как он появился

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

Dart

Dart был представлен Google в 2011 году как замена JavaScript для веб-разработки. Изначально планировалось, что браузеры будут встраивать Dart VM, что позволило бы достичь более высокой производительности. Однако этот план не сработал, и Dart переориентировался.

Настоящий прорыв для Dart произошел в 2017 году с анонсом Flutter — фреймворка для создания кроссплатформенных мобильных приложений. Flutter использует Dart в качестве основного языка, и благодаря ему популярность Dart резко выросла. Сегодня Dart — это язык не только для Flutter, но и для веб-разработки (через компиляцию в JavaScript) и для серверов.

«Dart — это язык, который заботится о разработчике. Он предсказуемый, быстрый и имеет лучшую в своем классе систему null safety» — команда Dart.

Ключевые особенности Dart

🔒 Null safety С Dart 2.12 (2021 год) язык полностью безопасен в отношении null. Переменные по умолчанию не могут быть null, если вы явно не укажете обратное (через оператор ?). Это предотвращает миллионы ошибок.
⚡ Высокая производительность Dart компилируется как в машинный код (AOT) для мобильных и десктопных приложений, так и в JavaScript для веба, а также имеет JIT-компиляцию для быстрой разработки (с горячей перезагрузкой).
🎯 Статическая типизация с выводом типов Dart — строго типизированный язык, но благодаря выводу типов (type inference) код остается кратким и читаемым. Ошибки типов отлавливаются на этапе компиляции.
🔄 Асинхронность (async/await) Dart имеет встроенную поддержку асинхронного программирования с Future и Stream, а также синтаксис async/await, привычный по JavaScript, C#, Python.
🧩 Мультиплатформенность Dart может компилироваться в:
  • Машинный код (iOS, Android, Windows, macOS, Linux) через Flutter
  • JavaScript (для веб-приложений)
  • Собственные исполняемые файлы (для консольных утилит)
📦 Богатая стандартная библиотека dart:core (основные типы), dart:async (асинхронность), dart:convert (JSON, UTF-8), dart:io (файлы, сеть, сервер), dart:html (для веба) и другие.

Синтаксис 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!'),
                ),
            ),
        );
    }
}
Важно: Если вы изучаете Flutter, вы учите и Dart. Но Dart можно использовать и отдельно от Flutter — для веба (через компиляцию в JS), для серверной разработки или для консольных инструментов.

Преимущества и недостатки 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

  1. Установите Dart SDK — скачайте с dart.dev/get-dart или используйте менеджеры пакетов (brew, chocolatey, apt).
  2. Настройте IDE — VS Code или Android Studio с плагином Dart.
  3. Изучите основы — переменные, типы, функции, классы, асинхронность.
  4. Попрактикуйтесь на DartPad — dartpad.dev позволяет писать и запускать Dart-код без установки.
  5. Освойте null safety — ключевое отличие Dart от многих языков.
  6. Изучите коллекции и функциональные методы — map, where, fold, expand.
  7. Познакомьтесь с Future и Stream — асинхронное программирование.
  8. Если цель — Flutter — после основ Dart переходите к изучению Flutter.
Совет: Не нужно углубляться в Dart на месяцы перед изучением Flutter. Изучите основы (синтаксис, классы, асинхронность, null safety) — это займет 2-3 дня — и начинайте 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 дружелюбно, документация отличная, а результат не заставит себя ждать.

Автор:

Дата публикации:

344095, Россия, Ростов-на-Дону, Санкт-Петербург, ул. Громова, 4
Телефон: 8 (928) 226-56-27

Обсудить проект

Оставьте обращение в форме обратной связи и наш менеджер свяжется с Вами в течении 30 минут в рабочий день или позвоните нам по телефону 7 (863) 226-56-27
Наш сайт использует файлы cookies (куки) только для персонализации сервисов, чтобы оптимизировать работу и функциональность этого сайта. Запретить обработку cookies можно в настройках Вашего браузера. Продолжая пользоваться сайтом, вы даете согласие использование файлов cookies (куки). Пожалуйста, ознакомьтесь с условиями политики принятия сookies