Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtSpTpNv 20 of 224 menu
◀ ▶

Тип Never в Dart

Большинство выражений в Dart имеют тип результата: строка, число, объект. Есть редкий случай, когда выражение не завершается возвратом значения - оно бросает ошибку или крутится без конца.

Для таких выражений в языке есть тип Never. У него нет ни одного допустимого значения, зато он помогает анализатору понимать ветки, где выполнение обрывается:

Never stopWith(String message) { throw ArgumentError(message); } void main() { stopWith('bad'); }

Функция stopWith объявлена с результатом Never, потому что после throw управление не возвращается к вызывающему коду. Программа останавливается с ошибкой. Любая попытка использовать результат такой функции как обычное значение не имеет смысла:

String requireText(String? value) { return value ?? stopWith('text required'); } Never stopWith(String message) { throw ArgumentError(message); } void main() { print(requireText('ok')); }

Оператор ?? справа стоит вызов с типом Never. Анализатор знает, что при null слева программа прервется, а при ненулевом значении вернется строка. Поэтому вся функция requireText имеет тип String, а не объединение с Never:

String pickLabel(String? code) { return code ?? stopWith('code missing'); } Never stopWith(String message) { throw ArgumentError(message); } void main() { var label = pickLabel('A-1'); print(label); }

Сделайте функцию, которая принимает nullable-число и возвращает обычное число. Если аргумент равен null, выполнение должно завершиться ошибкой с вашим текстом. Для 12 выведите результат.

Напишите функцию без результата, которая всегда уходит в бесконечный цикл. Укажите у этой функции тип Never. В main сохраните ссылку на нее в переменную и убедитесь, что код компилируется.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить