Ответ
Нет, в Dart нет примитивных типов в традиционном понимании. Все типы — это объекты, наследуемые от класса Object. Это фундаментальное отличие от языков вроде Java или C#.
Примеры «примитивов», которые на самом деле объекты:
int age = 30; // Объект класса int
double price = 99.99; // Объект класса double
bool isActive = true; // Объект класса bool
String name = 'Flutter'; // Объект класса String
Что это значит на практике:
-
Можно вызывать методы у «примитивов»:
int number = 42; print(number.isEven); // true - метод объекта int print(3.14.floor()); // 3 - метод объекта double print('Dart'.toUpperCase()); // 'DART' - метод объекта String -
Можно использовать в коллекциях, требующих объектов:
List<Object> objects = [1, 'text', true]; // Все элементы — объекты Set<int> numbers = {1, 2, 3}; // int работает как объект в Generics -
Null safety работает единообразно:
int? nullableInt = null; // int? — nullable тип объекта String? nullableString = null;
Сравнение с другими языками:
- Java/C#:
int(примитив) vsInteger(объект), нужна autoboxing. - Dart: только
intкак объект, никакого autoboxing не требуется.
Зачем такой дизайн в Dart:
- Простота языка — единая модель для всех типов.
- Лучшая интеграция с системой типов — особенно с Generics.
- Предсказуемое поведение — нет сюрпризов с autoboxing/unboxing.
В моём Flutter-проекте это означает, что я могу единообразно работать со всеми типами данных, не задумываясь о том, примитив это или объект.