← Назад к вопросам

Есть ли в Dart примитивные типы данных?

1.6 Junior🔥 141 комментариев
#Dart

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Примитивные типы данных в Dart

В Dart НЕТ примитивных типов в классическом понимании (как в Java или C). Все типы данных в Dart — это объекты, наследующие от базового класса Object. Однако Dart обрабатывает некоторые типы оптимизированно, как если бы они были примитивами.

Встроенные типы данных

int — целые числа

int count = 42;
int negative = -10;
int large = 9223372036854775807; // 64-bit

// int — это объект!
int number = 5;
print(number.isEven); // true
print(number.abs()); // 5

double — вещественные числа

double price = 19.99;
double pi = 3.14159;

// double — тоже объект!
double value = 10.5;
print(value.round()); // 11
print(value.toStringAsFixed(1)); // "10.5"

String — текст

String greeting = "Hello, Dart!";
String empty = "";

// String — объект с методами
String text = "flutter";
print(text.toUpperCase()); // "FLUTTER"
print(text.length); // 7
print(text[0]); // "f"

bool — логические значения

bool isActive = true;
bool isEmpty = false;

// bool — объект
print(isActive.toString()); // "true"

Почему в Dart нет примитивов?

Унифицированная объектная модель

int number = 5;
// number — это полноценный объект Object
print(number.runtimeType); // int

String text = "hello";
// text — тоже объект
print(text.runtimeType); // String

Каждый тип имеет методы

// int методы
int age = 25;
print(age.isNegative); // false
print(age.bitLength); // 5
print(age.gcd(15)); // 5

// double методы
double temp = 36.5;
print(temp.ceil()); // 37
print(temp.truncate()); // 36

// String методы
String name = "John";
print(name.split('').join('-')); // "J-o-h-n"
print(name.contains('oh')); // true

// bool методы
bool flag = true;
print(flag.toString()); // "true"

Оптимизация под примитивы

Хотя все типы — объекты, Dart VM оптимизирует их:

// Эти операции максимально быстрые благодаря оптимизации
int a = 10;
int b = 20;
int sum = a + b; // Выполняется как примитивная операция

double x = 1.5;
double y = 2.5;
double result = x * y; // Оптимизировано

Типы данных в иерархии Dart

object Object (базовый класс для всех)
├── int
├── double
├── String
├── bool
├── List
├── Map
├── Set
└── ... и другие

Функции как объекты

Даже функции в Dart — это объекты:

void Function() callback = () {
  print("Hello");
};

print(callback.runtimeType); // void Function()
print(callback is Function); // true

Сравнение: Java vs Dart

Java (есть примитивы)

int number = 5; // примитив
Integer boxed = 5; // объект (wrapper)

Dart (всё объекты)

int number = 5; // объект, но оптимизирован
// wrapper не требуется

Практические примеры

Работа с типами

int count = 10;
double price = 99.99;
String product = "Laptop";
bool inStock = true;

// Все имеют методы
print(count.toString()); // "10"
print(price.toStringAsFixed(2)); // "99.99"
print(product.toLowerCase()); // "laptop"
print(inStock.toString()); // "true"

Type checking

var value = 42;
if (value is int) {
  print("Это целое число: $value");
}

value = "text";
if (value is String) {
  print("Это строка: $value");
}

Итого

В Dart НЕТ примитивных типов. Все данные — это объекты, наследующие от Object. Однако Dart VM оптимизирует встроенные типы (int, double, String, bool) так, чтобы они выполнялись эффективно, как примитивы в других языках. Это лучший из обоих миров: единая объектная модель с производительностью примитивов.