Назад к вопросам
Middle
393
questionbank

Что такое тип Never в языке Dart?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

Примеры использования:

  • Функция, выбрасывающая исключение:

    Never _throwError(String message) {
      // Выбрасывает исключение, функция никогда не возвращает значение
      throw StateError(message);
    }
    
  • Функция с бесконечным циклом:

    Never _infiniteLoop() {
      // Входит в бесконечный цикл, функция никогда не завершается
      while (true) {
        // Делаем что-то
      }
    }
    

Основное преимущество Never в том, что он помогает компилятору понять, что код после вызова такой функции или метода недостижим, что позволяет выполнять статический анализ для улавливания потенциальных ошибок, например, недостижимого кода и неправильной обработки ошибок.

В отличие от void, который означает, что функция не возвращает значение (но успешно завершается), Never означает, что функция никогда не завершится в принципе.

// Функция, возвращающая void (завершается успешно, но без значения)
void doSomething() {
  print('Doing something');
}

// Функция, возвращающая Never (никогда не завершается успешно)
Never crashAndBurn() {
  throw 'Oh no!';
}

Тип Never является нижним типом (bottom type), то есть он является подтипом любого другого типа. Это позволяет использовать функцию, возвращающую Never, в местах, где ожидается любой другой тип.