Тип Never
Тип Never в Dart - это специальный тип, который
не содержит ни одного значения. Он является подтипом
всех остальных типов. Переменная типа Never
не может быть инициализирована никаким значением,
поэтому такая переменная не может существовать в
рабочем коде. Основное применение типа Never -
это указание на то, что функция никогда не завершается
нормально: она либо всегда выбрасывает исключение,
либо выполняется бесконечно. Также Never
используется в обобщённых типах, например в
Future<Never> или List<Never>, для
обозначения контейнеров, которые не могут содержать
значений.
Синтаксис
Never
Пример
Давайте объявим функцию, которая всегда выбрасывает
исключение. Её возвращаемый тип - Never,
так как она никогда не возвращает значение:
Never throwError()
{
throw Exception('Something went wrong');
}
void main()
{
try
{
throwError();
}
catch (e)
{
print('Caught: $e');
}
}
Результат выполнения кода:
"Caught: Exception: Something went wrong"
Пример
Давайте используем тип Never в обобщённом
контейнере. Список типа List<Never> не может
содержать ни одного элемента, поэтому его длина
всегда равна нулю:
void main()
{
List<Never> res = [];
print(res);
print(res.length);
}
Результат выполнения кода:
[]
0
Пример
Давайте напишем функцию, которая возвращает тип
Never через приведение типа. Такая функция
может быть полезна для прерывания выполнения
программы в недостижимых ветках кода:
Never fail(String message)
{
throw StateError(message);
}
int divide(int a, int b)
{
if (b == 0)
{
fail('Division by zero');
}
return a ~/ b;
}
void main()
{
print(divide(10, 2));
}
Результат выполнения кода:
5
Смотрите также
-
тип
void,
который обозначает отсутствие возвращаемого значения -
тип
dynamic,
который допускает значения любого типа -
тип
nullable object,
который допускает значение null -
тип
Type,
который представляет тип во время выполнения