Что такое ключевое слово var в Dart?

«Что такое ключевое слово var в Dart?» — вопрос из категории Dart Core, который задают на 67% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Dart var — это ключевое слово для объявления переменной с выводом типа. Компилятор автоматически определяет тип переменной на основе значения, присвоенного при инициализации, и затем фиксирует его.

Как это работает:

var name = 'Алиса'; // Компилятор выводит тип `String`
var count = 42;     // Компилятор выводит тип `int`
var list = [];      // Компилятор выводит тип `List<dynamic>`
var typedList = <String>[]; // Компилятор выводит тип `List<String>`

Важные особенности:

  • Тип фиксируется один раз. После объявления тип изменить нельзя.
    var id = 100;
    id = 200;     // OK, значение того же типа (int)
    id = 'двести'; // ОШИБКА компиляции: тип `int` не может быть `String`
  • Требует инициализации при объявлении. Тип не может быть выведен из null.
    var value; // ОШИБКА: Нельзя вывести тип. Нужно использовать `var value = null;` (тип `dynamic`) или `dynamic value;`.

Когда использовать var:

  • Для локальных переменных, когда тип значения очевиден из контекста (например, var controller = TextEditingController();).
  • Для сокращения многословных generic-типов (например, var complexMap = <String, List<Future<MyData>>>{};).

Чем отличается от dynamic и Object?

  • var: Статический вывод типа. Безопасно, проверяется на этапе компиляции.
  • dynamic: Отключает статическую проверку типов. Тип может меняться, проверка откладывается на время выполнения.
  • Object: Переменная имеет статический тип Object. Для доступа к методам конкретного типа требуется явное приведение (as).