Menu
Coddy logo textTech

Шпаргалка по 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;
Тип, допускающий nullString? name;
Доступ с учётом nulluser?.name
Объединение с nullname ?? "default"
Присваивание при nullname ??= "default";
Утверждение non-nullname!
Отложенная инициализация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 / wherenums.map((n) => n * 2), nums.where((n) => n > 1)
Литерал mapvar ages = {"Ada": 30};
Доступ к mapages["Ada"]
Литерал множестваvar ids = {1, 2, 3};
Оператор spreadvar all = [...a, ...b];
Collection if / for[if (show) 1, for (n in xs) n]

Управление потоком

Условия пишутся в скобках; switch поддерживает образцы.

ОперацияСинтаксис
If / elseif (x > 0) { ... } else { ... }
Тернарный операторvar r = x > 0 ? "pos" : "neg";
Switchswitch (n) { case 1: ...; default: ... }
Цикл forfor (var i = 0; i < 10; i++) { ... }
Цикл for-infor (var item in items) { ... }
forEachitems.forEach((x) => print(x));
Цикл whilewhile (x < 100) { ... }
Do-whiledo { ... } while (x < 100);
Break / continuebreak;, 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)
Typedeftypedef 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 { ... }
Вызвать supersuper(args)
Абстрактный классabstract class Shape { ... }
Реализовать интерфейсclass Dog implements Animal { ... }

Асинхронность (Future / async-await)

Future представляют значения, доступные позже; await приостанавливает выполнение, пока они не разрешатся.

ОперацияСинтаксис
Асинхронная функцияFuture<int> load() async { ... }
Ожидание futurevar data = await load();
Вернуть значениеreturn 42; внутри async-функции
Задержкаawait Future.delayed(Duration(seconds: 1));
Обработка ошибокtry { await load(); } catch (e) { ... }
Цепочка thenload().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 бесплатна?
Да. Эта шпаргалка по Dart полностью бесплатна, регистрация не требуется. Добавьте её в закладки и возвращайтесь, когда нужно посмотреть оператор null safety, метод коллекции или паттерн асинхронного кода.
Как работает null safety в Dart?
В Dart каждый тип по умолчанию не допускает null - int count никогда не может содержать null. Чтобы разрешить null, вы добавляете ? (String? name), и тогда компилятор заставляет вас обработать случай с null. Помощники делают это лаконичным: ?. для доступа с учётом null, ?? для запасного значения и ! для утверждения, что значение non-null, когда вы уверены. Это ловит ошибки с null на этапе компиляции, а не во время выполнения.
Что такое Future и как работают async и await?
Future представляет значение, которое будет доступно позже, например результат сетевого вызова. Пометка функции как async позволяет использовать await, который приостанавливает выполнение, пока future не завершится, и затем выдаёт значение - так вы пишете асинхронный код, читающийся сверху вниз, как синхронный. Оборачивайте await в try/catch, чтобы обрабатывать ошибки.
Можно ли практиковать Dart онлайн?
Да. Откройте playground для Dart, чтобы выполнить любой фрагмент из этой шпаргалки прямо в браузере - без установки SDK. А если нужна структура, бесплатный интерактивный курс Dart от Coddy шаг за шагом проведёт вас от null safety и коллекций до классов и async/await.
Подходит ли эта шпаргалка для начинающих?
Да. Она построена от самых распространённых тем (переменные, null safety, управление потоком) к продвинутым (классы, Future, async/await), так что верхние разделы можно использовать с первого дня и постепенно осваивать остальное.
Coddy programming languages illustration

Изучайте Dart с Coddy

НАЧАТЬ