Sobes.tech
Middle

Czym jest typ Never w języku Dart?

sobes.tech AI

Odpowiedź od AI

Typ Never jest wskaźnikiem na to, że wyrażenie nigdy nie zakończy się sukcesem. Jest używany dla funkcji i metod, które albo rzucają wyjątek, albo wchodzą w nieskończoną pętlę.

Przykłady użycia:

  • Funkcja rzucająca wyjątek:

    Never _throwError(String message) {
      // Rzuca wyjątek, funkcja nigdy nie zwraca wartości
      throw StateError(message);
    }
    
  • Funkcja z nieskończoną pętlą:

    Never _infiniteLoop() {
      // Wchodzi w nieskończoną pętlę, funkcja nigdy się nie kończy
      while (true) {
        // Robić coś
      }
    }
    

Główna zaleta Never polega na tym, że pomaga kompilatorowi zrozumieć, że kod po wywołaniu takiej funkcji lub metody jest nieosiągalny, co umożliwia statyczną analizę w celu wykrycia potencjalnych błędów, takich jak nieosiągalny kod i nieprawidłowe obsługi błędów.

W przeciwieństwie do void, które oznacza, że funkcja nie zwraca wartości (ale kończy się pomyślnie), Never oznacza, że funkcja nigdy nie zakończy się w zasadzie.

// Funkcja zwracająca void (kończy się pomyślnie, ale bez wartości)
void doSomething() {
  print('Robię coś');
}

// Funkcja zwracająca Never (nigdy nie kończy się pomyślnie)
Never crashAndBurn() {
  throw 'O nie!';
}

Typ Never jest typem dolnym (bottom type), czyli jest podtypem każdego innego typu. Pozwala to na użycie funkcji zwracającej Never w miejscach, gdzie oczekiwany jest dowolny inny typ.