> Что такое типы данных в Dart (Flutter)

Уровень: junior · Роль: frontend · Категория: Технические вопросы

Компании: Верме

Стек: Flutter

> Пример ответа

Короткий ответ

Типы данных в Dart - это система классификации значений, определяющая, какие операции можно выполнять с данными и как они хранятся в памяти. Dart - статически типизированный язык, но поддерживает выведение типов через var. Основные типы: int, double, String, bool, List, Map, Set, dynamic, Object, Null. Каждый тип - это класс, поэтому все значения являются объектами.

Подробное объяснение

Dart использует строгую статическую типизацию, что означает: тип переменной известен на этапе компиляции. Это позволяет находить ошибки до запуска приложения и улучшает производительность.

Базовые типы:

  • int - целые числа (64-битные на нативных платформах)
  • double - числа с плавающей точкой (64-битные)
  • String - неизменяемые последовательности UTF-16 кодовых единиц
  • bool - логические значения true/false
  • List - упорядоченная коллекция элементов (аналог массива)
  • Map - коллекция пар ключ-значение
  • Set - коллекция уникальных элементов

Специальные типы:

  • dynamic - отключает проверку типов в рантайме, позволяет хранить любое значение
  • Object - базовый класс для всех типов, кроме Null
  • Null - тип для значения null

Важная особенность: в Dart нет примитивных типов - даже int и bool являются классами. Это значит, что у них есть методы, например int.parse() или toString().

Также есть nullable-типы (с ?) и non-nullable, что появилось в Dart 2.12 с sound null safety. Например, String? может быть null, а String - нет.

На практике

Во Flutter типы данных используются повсеместно: от объявления моделей данных до работы с состояниями виджетов. Понимание типов критично для:

  • корректной работы с JSON-ответами от API
  • управления состоянием (например, ValueNotifier<int>)
  • передачи данных между виджетами через конструкторы

При работе с коллекциями важно помнить о дженериках: List<String>, Map<String, dynamic>. Это помогает избежать ошибок при обращении к элементам.

Пример кода

void main() {
  // Базовые типы
  int age = 25;
  double price = 19.99;
  String name = 'Alice';
  bool isActive = true;

  // Коллекции
  List<String> fruits = ['apple', 'banana'];
  Map<String, int> scores = {'math': 90, 'physics': 85};
  Set<int> uniqueNumbers = {1, 2, 3};

  // Nullable тип
  String? nickname; // может быть null
  nickname = 'Al';

  // dynamic - использовать осторожно
  dynamic anything = 'text';
  anything = 42;

  // Выведение типа
  var count = 10; // int
  final city = 'London'; // String

  // Проверка типов
  if (anything is int) {
    print('Это число');
  }

  // Преобразование
  String numberStr = '123';
  int number = int.parse(numberStr);
}

Как отвечать на собеседовании

Начни с определения: типы данных - это система, которая определяет, какие значения может принимать переменная и какие операции с ней допустимы. Затем перечисли основные типы в Dart. Упомяни, что Dart - статически типизированный язык, но с поддержкой выведения типов. Подчеркни, что в Dart всё является объектом, включая числа и булевы значения. Если спросят про null safety - объясни разницу между String и String?. Покажи понимание дженериков на примере List<String>. Заверши примером использования типов в реальном Flutter-проекте, например при работе с моделью данных.

Что проверяет интервьюер

Интервьюер оценивает:

  • базовое понимание системы типов Dart
  • знание ключевых типов и их назначения
  • понимание разницы между var, final, const
  • осведомлённость о null safety
  • умение работать с коллекциями и дженериками
  • способность объяснить, почему типы важны для надёжности кода

Для junior-позиции достаточно уверенно отвечать на вопросы о базовых типах и их использовании. Покажи, что понимаешь, как типы помогают избегать ошибок в рантайме.

Типичные ошибки

  • Путаница между var и dynamic: var - это выведение типа на этапе компиляции, а dynamic - отключение проверки типов.
  • Забывают про nullable-типы и пытаются присвоить null переменной без ?.
  • Используют dynamic везде, где не знают тип - это плохая практика.
  • Не указывают дженерики для коллекций, что приводит к ошибкам при извлечении элементов.
  • Путают int и double: в Dart нет неявного преобразования между ними, нужно использовать .toDouble() или .toInt().
  • Не знают, что String в Dart - неизменяемый тип, и операции с ним создают новые строки.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью