Ответ
Never в Dart — это специальный тип, который указывает, что выражение никогда не завершится успешно (не вернет нормальный результат). Код, возвращающий Never, гарантированно прерывает выполнение потока в этой точке.
Основные случаи использования:
-
Функции, которые всегда выбрасывают исключение:
// Функция имеет тип возвращаемого значения `Never` Never throwAssertionError(String message) { throw AssertionError(message); } void validateInput(String input) { if (input.isEmpty) { throwAssertionError('Input cannot be empty!'); } // Анализатор потока знает, что если input был пустым, // выполнение до этой точки не дойдет. print('Valid input: $input'); } -
Функции с бесконечным циклом: Например, сервер, слушающий сокеты.
Never runServerForever() { while (true) { // Обработка запросов... } // Конец функции никогда не будет достигнут. } -
Улучшение анализа потока управления: Компилятор (анализатор) использует
Neverдля более точного определения достижимости кода. Это помогает выявлять ошибки и избегать лишних проверок на null.String getValueOrThrow(Map<String, String> map, String key) { final value = map[key]; if (value == null) { throw StateError('Key not found'); // Неявно возвращает `Never` } // Анализатор понимает, что здесь `value` точно не null, // потому что в противном случае выполнение было бы прервано. return value; }
Ключевой вывод: Never — это инструмент для системы типов Dart, который делает код более безопасным и выразительным, явно обозначая точки невозврата.