Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Примитивные типы данных в 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) так, чтобы они выполнялись эффективно, как примитивы в других языках. Это лучший из обоих миров: единая объектная модель с производительностью примитивов.