Встроенные типы Dart

Таблица встроенных базовых типов Dart

Название категорииИдентификатор типаЗапись / пример литералаКраткое описание
Numbers (Числа)int, doubleint a = 10; double b = 3.14;Две группы чисел: целые и дробные с двойной точностью; общим родительским классом является num
Strings (Строки)Stringvar str = "foxdevelop.com";Хранит последовательность символов UTF-16, поддерживает интерполяцию, многострочные и необработанные строки
Booleans (Логические значения)boolbool flag = true;Всего два возможных значения: true / false
Records (Кортежи-записи)Литерал записи (v1, v2)var record = (10, "test");Составной тип фиксированной длины с несколькими значениями, поддерживает деструктуризацию
Functions (Функции)Functionvoid fn() {} Function func = ()=>1;Объекты первого класса: их можно присваивать, передавать как параметр и возвращать из функции
Lists (Списки / Массивы)Listvar list = [1,2,3];Упорядоченная коллекция с возможностью повторяющихся элементов, аналог массивов
Sets (Множества)Setvar set = {1,2,3};Неупорядоченная коллекция без дублирующихся элементов
Maps (Ключ-значение отображения)Mapvar map = {"name":"Tom"};Структура хранения пар ключ-значение, ключи уникальны
Runes (Unicode-кодпоинты)RunesRunes("\u{1f600}")Низкоуровневый доступ к кодпоинтам Unicode; официально рекомендуется использовать пакет characters
Null (Пустое значение)NullNull 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 Конкатенация строк

  1. Соседние литералы склеиваются автоматически (даже с переводом строки)
  2. Оператор + для склеивания
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-символов

  1. Runes: прямой доступ к внутренним Unicode-кодпоинтам, устаревший подход
  2. Рекомендуется 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)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *