Таблица встроенных базовых типов Dart
| Название категории | Идентификатор типа | Запись / пример литерала | Краткое описание |
|---|---|---|---|
| Numbers (Числа) | int, double | int a = 10; double b = 3.14; | Две группы чисел: целые и дробные с двойной точностью; общим родительским классом является num |
| Strings (Строки) | String | var str = "foxdevelop.com"; | Хранит последовательность символов UTF-16, поддерживает интерполяцию, многострочные и необработанные строки |
| Booleans (Логические значения) | bool | bool flag = true; | Всего два возможных значения: true / false |
| Records (Кортежи-записи) | Литерал записи (v1, v2) | var record = (10, "test"); | Составной тип фиксированной длины с несколькими значениями, поддерживает деструктуризацию |
| Functions (Функции) | Function | void fn() {} Function func = ()=>1; | Объекты первого класса: их можно присваивать, передавать как параметр и возвращать из функции |
| Lists (Списки / Массивы) | List | var list = [1,2,3]; | Упорядоченная коллекция с возможностью повторяющихся элементов, аналог массивов |
| Sets (Множества) | Set | var set = {1,2,3}; | Неупорядоченная коллекция без дублирующихся элементов |
| Maps (Ключ-значение отображения) | Map | var map = {"name":"Tom"}; | Структура хранения пар ключ-значение, ключи уникальны |
| Runes (Unicode-кодпоинты) | Runes | Runes("\u{1f600}") | Низкоуровневый доступ к кодпоинтам Unicode; официально рекомендуется использовать пакет characters |
| Null (Пустое значение) | Null | Null n = null; | Единственное значение — null, корневой базовый тип системы null-безопасности |
Все переменные в Dart по сути являются объектами (экземплярами классов). Их можно быстро создавать через литералы или инициализировать вызовом соответствующего конструктора.
'hello' — строковый литерал, true — логический литерал; конструктор Map() создаёт экземпляр Map.
Специальные вспомогательные типы языка
Они не относятся к базовым встроенным типам, но все являются ключевыми словами Dart.
Эти типы выполняют особые задачи в системе типов, асинхронном программировании и статической проверке:
| Тип | Описание назначения |
|---|---|
Object | Родительский класс всех классов Dart, кроме Null |
Enum | Родительский класс всех перечислений |
Future / Stream | Специально для асинхронного программирования |
Iterable | Используется для циклов for-in и синхронных генераторов |
Never | Выражение, которое никогда не завершается корректно (используется для функций, всегда выбрасывающих исключения) |
dynamic | Отключает статическую проверку типов; предпочитайте использовать Object / Object? |
void | Без возвращаемого значения, часто используется как возвращаемый тип функций |
1 Numbers Числа
Родительский класс: num
Числа делятся на два подкласса: int (целое), double (дробное). Оба наследуют num
1.1 int Целое число
Разница диапазонов (Dart используется и для фронтенда, поэтому есть веб-версия):
- Нативные платформы:
-2^63 ~ 2^63 - 1 - Веб (на основе JS):
-2^53 ~ 2^53 - 1
Без десятичной точки; поддерживает десятичную и шестнадцатеричную запись с префиксом 0x
Пример
void main() {
// Десятичное целое
var pageCount = 123;
// Шестнадцатеричное
var hex = 0xDEADBEEF;
// Разделитель цифр подчёркиванием (Dart 3.6+, улучшает читаемость)
var million = 1_000_000;
var mac = 0x00_14_22_01_23_45;
print(pageCount);
print(hex);
print(million);
print(mac);
}Code language: Dart (dart)
Результат выполнения
123
3735928559
1000000
86469845829
1.2 double Дробное число двойной точности
Содержит десятичную точку или научную нотацию
void main() {
var pi = 3.14; // десятичная точка
var raid = 1.61e5; // 1.61 * 10^5 научная нотация
var tiny = 0.000_000_000_02; // подчёркивание для дробных
print(pi);
print(raid);
print(tiny);
}Code language: PHP (php)
3.14
161000.0
2e-11Code language: CSS (css)
1.3 Родительский класс num
Переменные типа num могут хранить как int, так и double:
void main() {
num money = 5;
money += 2.5; // Автоматическое преобразование в double, money = 7.5
// Присвоение int в double преобразует автоматически в 1.0
double zoom = 1;
print(money);
print(zoom);
}Code language: PHP (php)
Результат выполнения
7.5
1.0Code language: CSS (css)
1.4 Взаимное преобразование типов
void main() {
// String → int
var one = int.parse('123');
// String → double
var pi = double.parse('3.14');
// int / double → String
String intStr = 99.toString();
String pi2 = 3.14159.toStringAsFixed(2); // Округление до двух знаков после запятой → "3.14"
print(one);
print(pi);
print(pi2);
}Code language: JavaScript (javascript)
Результат выполнения
123
3.14
3.14Code language: CSS (css)
1.5 Уникальные битовые операторы для int
Только int поддерживает сдвиги, побитовые И/ИЛИ/Исключающее ИЛИ и побитовое инвертирование. Подробнее: Dart Bitwise and shift operators – FoxDevelop
void main() {
print(3 << 1); // Сдвиг влево 0011 <<1 → 0110
print(3 | 4); // Побитовое ИЛИ
print(3 & 4); // Побитовое И
print(~3); // Побитовое инвертирование
}Code language: PHP (php)
6
7
0
-4
1.6 Числовые константы (константы времени компиляции)
Чистые числовые литералы и арифметические операции между константами можно помечать через const
Значения, вычисляемые на фиксированное значение на этапе компиляции (до запуска программы), не меняющиеся во время исполнения и не требующие пересчёта, называются константами времени компиляции и помечаются модификатором const.
const msPerSec = 1000;
const waitSec = 5;
const waitMs = waitSec * msPerSec; // Константа времени компиляцииCode language: JavaScript (javascript)
const: константа времени компиляции; компилятор вычисляет выражение до запуска программы и записывает фиксированное значение прямо в скомпилированный бинарный файл; во время исполнения происходит только чтение, дополнительных вычислений нет.
final: константа времени исполнения (значение присваивается один раз при запуске, после этого изменить нельзя).
1.7 Встроенные математические методы
Доступны напрямую у типа num; для сложных расчётов используйте пакет dart:math
abs(), ceil(), floor(), round() и т.д.
num n = -3.6;
print(n.abs()); // 3.6
print(n.ceil()); // -3
print(n.floor()); // -4Code language: PHP (php)
2. String Строка
Последовательность символов в кодировке UTF-16 для представления текста, два варианта записи: одинарные или двойные кавычки.
2.1 Способы объявления: одинарные / двойные кавычки
var s1 = 'строка в одинарных кавычках';
var s2 = "строка в двойных кавычках";
// Экранирующие символы
var s3 = 'It\'s ok';
var s4 = "It's ok"; // При смене типа кавычек экранирование не нужно
Code language: JavaScript (javascript)
Некоторые символы внутри строк имеют специальное назначение (двойная кавычка ", перевод строки, обратная косая черта \). При прямой записи они ломают структуру строки и вызывают ошибку компиляции.
Экранирующий символ \ отменяет специальное действие символа или выводит невидимые управляющие символы.
Клавиши Enter, Tab и другие не отображаются на экране, для их записи используются экранирующие последовательности как \t. Протестируйте код ниже для понимания:
print("name\tage\tcountry");
print("Jack\t18\tUSA");
print("Lucy\t20\tEgypt");Code language: PHP (php)
2.2 Интерполяция строк ${выражение}
- Для простых переменных фигурные скобки можно опускать:
$переменная - Объекты автоматически вызывают метод
.toString()
void main() {
var word = "interpolation";
var str1 = "В Dart есть функция $word";
var str2 = "Верхний регистр: ${word.toUpperCase()}";
print(str2); //Верхний регистр: INTERPOLATION
}Code language: JavaScript (javascript)
2.3 Конкатенация строк
- Соседние литералы склеиваются автоматически (даже с переводом строки)
- Оператор
+для склеивания
var s1 = "Первая строка"
"Вторая строка";
var s2 = "a" + "b";
assert(s1 == "Первая строкаВторая строка");
assert(s2 == "ab");Code language: JavaScript (javascript)
2.4 Многострочные строки: тройные кавычки »’ / «»»
void main() {
var multi1 = '''
Многострочный
текст
''';
var multi2 = """
Многострочная строка в тройных двойных кавычках
hello foxdevelop.com
""";
print(multi1);
print(multi2);
}Code language: PHP (php)
Многострочный
текст
Многострочная строка в тройных двойных кавычках
hello foxdevelop.comCode language: CSS (css)
Двойные кавычки внутри тройных одинарных и наоборот не требуют экранирования:
2.5 Необработанные строки r»» без интерпретации экранов
var raw = r"Символ перевода строки \n не будет обработан";
print(raw); // \n выводится как есть
Code language: PHP (php)
2.6 Ограничения для константных строк const
Содержимое интерполяции должно быть константой времени компиляции (числа, bool, константные строки); обычные переменные и коллекции не допускаются.
const num cNum = 10;
const bool cBool = true;
const String cStr = "const";
// Корректная константная строка
const valid = "$cNum $cBool $cStr";
var normalNum = 10;
// Ошибка: интерполяция содержит неконстантную переменную
// const invalid = "$normalNum";
Code language: JavaScript (javascript)
3. bool Логический тип
Всего два экземпляра: true / false, обе являются константами времени компиляции
Dart использует строгую типизацию: нельзя напрямую проверять истинность по значениям, обязательны явные сравнения
void main() {
var emptyStr = "";
print(emptyStr.isEmpty); // Проверка пустой строки
var zero = 0;
print(zero == 0); // Проверка нуля
var nil = null;
print(nil == null); // Проверка null
var nan = 0 / 0;
print(nan.isNaN); // Проверка нечислового значения
}Code language: PHP (php)
4. Runes & characters Обработка Unicode-символов
- Runes: прямой доступ к внутренним Unicode-кодпоинтам, устаревший подход
- Рекомендуется
package:characters: корректная обработка визуально цельных символов (графемных кластеров, например эмодзи флагов стран)
Синтаксис экранирования Unicode
- 4 шестнадцатеричных знака:
\uXXXX - Большие кодпоинты более 4 знаков:
\u{шестнадцатеричное_значение}
var heart = "\u2665"; // ♥
var laugh = "\u{1f606}"; // 😆
Code language: JavaScript (javascript)
Пример использования пакета characters
import 'package:characters/characters.dart';
void main() {
var text = "Hi 🇩🇰";
print(text.characters.last); // Вывод полного эмодзи флага Дании
}
Code language: JavaScript (javascript)
5. Symbol Символ
Используется для рефлексии и обфускации кода, литерал #идентификатор, константа времени компиляции
Обфускация не изменяет объекты Symbol, поэтому они подходят для динамического обращения к идентификаторам по имени.
#userName
#getData
Code language: CSS (css)
6. Null Тип пустого значения
Единственное допустимое значение — null. В системе null-безопасности Null является самостоятельным корневым типом, все допускающие null типы совместимы с ним.
String? name = null;
Null n = null;
Code language: JavaScript (javascript)