Wpis z mikrobloga

@Metoksyfenidyna9: Wyjątki są do sytuacji, które nie powinny się zdarzać podczas normalnego działania programu. Wyjątkiem obsługujesz sytuacje, kiedy kończy Ci się pamięć, ifem obsługujesz sytuację, kiedy użytkownik nie wprowadził swojego loginu w formularzu.
  • Odpowiedz
@Metoksyfenidyna9: na to pytanie nie ma dobrej odpowiedzi.Generalnie oba podejścia mają dużo zalet i wad, a języki, które są nastawione na jeden sposób raportowania błędów i tak pozwalają w jakiś sposób na drugi. W językach nastawionych głownie na wyjątki (C++, Java) często spotyka się wartości liczbowe albo specialne wartości opakowujące błąd takie jak https://ned14.github.io/outcome/ . Języki, które używają głownie wartości oznaczających błąd (Rust, Go) i tak mają mechanizm pseudo wyjątków
  • Odpowiedz
@Metoksyfenidyna9: Exception driven development to największy rak jaki mógłby istnieć. Wyjątki, jak sama nazwa mówi, to sytuacje wyjątkowe, które nie powinny mieć miejsca. Sterowanie przepływem programu za pomocą wyjątków to jak jednoznaczne stwierdzenie, że Twój program działa w oparciu o błędy ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@asunez: Czyli jak są wyjątki, to program "działa w oparciu o błędy", ale jak błędy są zwracane w wartości funkcji i sprawdzanie w ifach, to już nie jest to działanie oparte o błędy. xD

Wyjątki, jak sama nazwa mówi, to sytuacje wyjątkowe, które nie powinny mieć miejsca.


Nie wiem, kto ci takich bzdur naopowiadał, że sytuacje wyjątkowe nie powinny mieć miejsca.
  • Odpowiedz
@Metoksyfenidyna9: Jak tworzysz funkcje/metody, które muszą coś zwrócić, ale niemożliwe jest zwrócenie wartości (i jest to niepoprawne zachowanie aplikacji), to w funkcji wypuszczasz wyjątek, który trzeba przechwycić. Dodatkowo, jeżeli działanie Twojej aplikacji zależy od działania serwisów zewnętrznych, które zawiodły - dobrze byłoby puścić wyjątek ( ͡° ͜ʖ ͡°)
  • Odpowiedz
@ponton: Sasza, ty ni podumał.

Ja nie mówię, że wyjątki są złe, czy że nie powinno się ich używać, ale nie powinny służyć do sterowania logiką. Przykładowo - jeśli chcesz pobrać rekordy z bazy, ale nie masz z nią połączenia - rzucony jest wyjątek, który łapiesz i zwracasz userowi komunikat, że nydyrydy.

Natomiast, jeżeli masz np. quiz matematyczny i użytkownik wpisuje błędną odpowiedź (np. 2+2=5), to nie powinieneś rzucać wyjątku
  • Odpowiedz
@asunez: Pytanie było: "Kiedy używacie bloku try-catch, a kiedy if/else do obsługi problemów?". Oczywiste mi się wydało, że nie pyta o logikę, tylko o błędy.
  • Odpowiedz