Ответ
В Dart я использую var для локальных переменных, когда тип значения очевиден из контекста инициализации. Это делает код чище без потери читаемости.
Идеальные случаи:
- Инициализация коллекций с явными дженериками или литералами:
var names = <String>[]; // Вместо List<String> names = []; var settings = {'theme': 'dark', 'notifications': true}; // Map<String, dynamic> var count = 0; // int - При работе с длинными именами типов, особенно в дженериках:
var complexStream = Stream<Map<String, List<Future<int>>>>.empty(); // Тип очевиден справа
Когда я избегаю var:
-
Если тип неочевиден из правой части выражения. Это ухудшает читаемость для других разработчиков (и для меня самого через месяц).
// Плохо: Что возвращает processData? var result = processData(); // Лучше: ProcessResult result = processData(); // Или даже лучше, если функция типизирована: final result = processData(); // final + вывод типа - Для публичных API (полей класса, возвращаемых типов методов, параметров). Там явное указание типа — это документация.
- Для переменных, которые инициализируются позже (не в момент объявления).
Практическое правило: Я предпочитаю использовать final вместо var, если переменная не будет переназначаться. Это даёт те же преимущества краткости, плюс гарантию неизменяемости: final list = <String>[];