Dart Academy · Lekcja

Własne wyjątki i rethrow

Definiowanie znaczących błędów i ponowne ich zgłaszanie

Lekcja 4 z 413 kroki

Własne wyjątki i rethrow to bezpłatna lekcja Dart Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Dart Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Dart Academy zawiera 4 lekcji w sumie.

Błędy, które coś oznaczają

Ogólne wyjątki ukrywają intencję. Własny wyjątek nazywa konkretny problem, dzięki czemu błędy są czytelne w całej aplikacji. 🏷️

Implementowanie Exception

Należy utworzyć klasę, która implements Exception. Oznacza to, że jest ona typem błędu, który Dart i inni programiści natychmiast rozpoznają jako możliwy do zgłoszenia.

class PaymentException implements Exception {}

Przechowywanie komunikatu

Warto przekazywać wyjątkom pole message w konstruktorze, aby procedury obsługi mogły odczytać przyczynę błędu.

class PaymentException implements Exception {
  final String message;
  PaymentException(this.message);
}

Czytelne toString

Należy przesłonić metodę toString, aby wyświetlenie wyjątku pokazywało jasny komunikat zamiast samej nazwy klasy.

@override
String toString() => 'PaymentException: $message';

Zgłaszanie własnego wyjątku

Własny wyjątek zgłasza się tak samo jak wbudowany. Gdy reguła zostanie naruszona, należy użyć throw z nową instancją wyjątku.

throw PaymentException('Card declined');

Przechwytywanie własnego typu

Własny wyjątek można przechwycić za pomocą klauzuli on, tak jak typy wbudowane, aby obsłużyć ten konkretny przypadek.

try {
  pay();
} on PaymentException catch (e) {
  print(e);
}

Czasem nie da się tego naprawić

Procedura obsługi może zarejestrować błąd, ale nie być w stanie go rozwiązać. Zamiast go ignorować, można przekazać go dalej za pomocą rethrow.

Słowo kluczowe rethrow

rethrow ponownie zgłasza bieżący wyjątek, zachowując jego pierwotny ślad stosu, dzięki czemu kod wywołujący widzi, gdzie wyjątek naprawdę powstał.

catch (e) {
  log(e);
  rethrow;
}

rethrow lepsze niż throw e

Zapis throw e resetuje ślad stosu, natomiast rethrow zachowuje go bez zmian. Przy ponownym zgłaszaniu wyjątku w catch należy zawsze preferować rethrow.

Zarejestruj, a potem przekaż dalej

Typowy schemat wygląda tak: przechwycić błąd, aby go logować, a następnie użyć rethrow, by wyższa warstwa zdecydowała, jak go obsłużyć.

catch (e) {
  logger.error(e);
  rethrow;
}

Dodawanie przydatnych pól

Własne wyjątki mogą przechowywać dodatkowe dane, takie jak code lub wartość, która spowodowała błąd, zapewniając procedurom obsługi więcej kontekstu do działania.

class ApiException implements Exception {
  final int code;
  ApiException(this.code);
}

Szybkie sprawdzenie

Dlaczego w catch należy używać rethrow zamiast throw e?

Podsumowanie

Potrafi już Pan/Pani tworzyć znaczące wyjątki, które implementują Exception, przechowują dane i używają rethrow do poprawnego przekazywania błędów wyżej. 🚀

Bezpłatny start

Ucz się Dart dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Własne wyjątki i rethrow” jest bezpłatna?

Tak — pełny tekst „Własne wyjątki i rethrow” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Dart Academy, przejdź na CoddyKit PRO. Kurs Dart Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Własne wyjątki i rethrow”?

Definiowanie znaczących błędów i ponowne ich zgłaszanie Ćwiczysz Dart Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Dart Academy?

Nie wymagamy żadnego doświadczenia. Dart Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Własne wyjątki i rethrow”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Dart Academy?

Tak. Każda lekcja Dart Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. throw, try i catch
  2. Klauzule on i typy wyjątków
  3. finally i gwarantowane sprzątanie
  4. Własne wyjątki i rethrow
← Powrót do Dart Academy