Шпаргалка по Dart
Последнее обновление
Hello World и структура программы
Каждая программа на Dart начинается с функции main верхнего уровня.
| Операция | Синтаксис |
|---|---|
| Точка входа | void main() { ... } |
| Вывести строку | print("Hello, World!"); |
| Интерполяция строк | print("Hi $name"); |
| Выражение в интерполяции | print("Sum: ${a + b}"); |
| Комментарий | // this is a comment |
| Многострочный комментарий | /* ... */ |
| Импортировать библиотеку | import 'dart:math'; |
| Запустить файл | dart run main.dart |
Переменные и типы
Dart статически типизирован, но может выводить типы через var.
| Операция | Синтаксис |
|---|---|
| Переменная с выводом типа | var age = 30; |
| Явный тип | int age = 30; |
| Константа времени компиляции | const pi = 3.14; |
| Константа времени выполнения | final name = getName(); |
| Базовые типы | int, double, String, bool |
| Динамический тип | dynamic x = 5; |
| Преобразование типа | int.parse("42"), n.toString() |
| Проверить тип | x is String, x as String |
Null safety
Типы по умолчанию не допускают null; добавьте ?, чтобы разрешить null.
| Операция | Синтаксис |
|---|---|
| Не допускает null (по умолчанию) | int count = 0; |
| Тип, допускающий null | String? name; |
| Доступ с учётом null | user?.name |
| Объединение с null | name ?? "default" |
| Присваивание при null | name ??= "default"; |
| Утверждение non-null | name! |
| Отложенная инициализация | late String value; |
| Spread с учётом null | [...?maybeList] |
Строки
Строки поддерживают одинарные, двойные и тройные кавычки.
| Операция | Синтаксис |
|---|---|
| Длина | s.length |
| Верхний / нижний регистр | s.toUpperCase(), s.toLowerCase() |
| Интерполяция | "Total: $price" |
| Конкатенация | "foo" + "bar" |
| Содержит | s.contains("ell") |
| Начинается / заканчивается на | s.startsWith("he") |
| Разбить | "a,b,c".split(",") |
| Заменить | s.replaceAll("a", "b") |
| Подстрока | s.substring(0, 3) |
| Обрезать пробелы | s.trim() |
Коллекции (List, Map, Set)
Три основных типа коллекций с литеральным синтаксисом.
| Операция | Синтаксис |
|---|---|
| Литерал списка | var nums = [1, 2, 3]; |
| Добавить в список | nums.add(4); |
| Доступ / длина | nums[0], nums.length |
| Map / where | nums.map((n) => n * 2), nums.where((n) => n > 1) |
| Литерал map | var ages = {"Ada": 30}; |
| Доступ к map | ages["Ada"] |
| Литерал множества | var ids = {1, 2, 3}; |
| Оператор spread | var all = [...a, ...b]; |
| Collection if / for | [if (show) 1, for (n in xs) n] |
Управление потоком
Условия пишутся в скобках; switch поддерживает образцы.
| Операция | Синтаксис |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| Тернарный оператор | var r = x > 0 ? "pos" : "neg"; |
| Switch | switch (n) { case 1: ...; default: ... } |
| Цикл for | for (var i = 0; i < 10; i++) { ... } |
| Цикл for-in | for (var item in items) { ... } |
| forEach | items.forEach((x) => print(x)); |
| Цикл while | while (x < 100) { ... } |
| Do-while | do { ... } while (x < 100); |
| Break / continue | break;, continue; |
Функции
Функции - значения первого класса; стрелочный синтаксис сокращает одиночные выражения.
| Операция | Синтаксис |
|---|---|
| Определить функцию | int add(int a, int b) { return a + b; } |
| Стрелочная функция | int square(int x) => x * x; |
| Необязательный позиционный | void log(String m, [int? code]) { ... } |
| Именованные параметры | void box({int w = 0, int h = 0}) { ... } |
| Обязательный именованный | void box({required int w}) { ... } |
| Анонимная функция | var f = (x) => x * 2; |
| Передать как аргумент | nums.map((n) => n * 2) |
| Typedef | typedef IntOp = int Function(int); |
Классы и конструкторы
Классы хранят состояние и поведение; конструкторы бывают нескольких форм.
| Операция | Синтаксис |
|---|---|
| Определить класс | class Point { int x; int y; } |
| Конструктор | Point(this.x, this.y); |
| Именованный конструктор | Point.origin() : x = 0, y = 0; |
| Создать экземпляр | var p = Point(1, 2); |
| Метод | double dist() { ... } |
| Геттер | int get area => w * h; |
| Наследование | class Circle extends Shape { ... } |
| Вызвать super | super(args) |
| Абстрактный класс | abstract class Shape { ... } |
| Реализовать интерфейс | class Dog implements Animal { ... } |
Асинхронность (Future / async-await)
Future представляют значения, доступные позже; await приостанавливает выполнение, пока они не разрешатся.
| Операция | Синтаксис |
|---|---|
| Асинхронная функция | Future<int> load() async { ... } |
| Ожидание future | var data = await load(); |
| Вернуть значение | return 42; внутри async-функции |
| Задержка | await Future.delayed(Duration(seconds: 1)); |
| Обработка ошибок | try { await load(); } catch (e) { ... } |
| Цепочка then | load().then((v) => print(v)); |
| Запуск параллельно | await Future.wait([a(), b()]); |
| Асинхронный поток | await for (var x in stream) { ... } |
Синтаксис Dart, который нужен чаще всего, на одной странице. Эта шпаргалка по Dart - быстрый справочник по ядру языка: переменные и типы, null safety, строки, коллекции, управление потоком, функции, классы, а также Future и async/await, на которых вы пишете приложения за Flutter.
Всё здесь - стандартный Dart, который работает на официальном SDK. Копируйте нужное или попробуйте каждый фрагмент вживую в playground для Dart - без установки.
Часто задаваемые вопросы по шпаргалке Dart
Эта шпаргалка по Dart бесплатна?
Как работает null safety в Dart?
int count никогда не может содержать null. Чтобы разрешить null, вы добавляете ? (String? name), и тогда компилятор заставляет вас обработать случай с null. Помощники делают это лаконичным: ?. для доступа с учётом null, ?? для запасного значения и ! для утверждения, что значение non-null, когда вы уверены. Это ловит ошибки с null на этапе компиляции, а не во время выполнения.Что такое Future и как работают async и await?
Future представляет значение, которое будет доступно позже, например результат сетевого вызова. Пометка функции как async позволяет использовать await, который приостанавливает выполнение, пока future не завершится, и затем выдаёт значение - так вы пишете асинхронный код, читающийся сверху вниз, как синхронный. Оборачивайте await в try/catch, чтобы обрабатывать ошибки.