![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Ostatnio ciekawi mnie temat używania Exceptionów - muszę przyznać, że trochę słabo to czuję. Kiedyś Exception stosowałem do rzeczy, które po prostu mogły spowodować niedziałanie aplikacji - np. brak dostępu do pliku czy coś podobnego. Ostatnio jednak widzę, że coraz częściej w nowych bibliotekach Exceptiony stosuje się w inny sposób tj. do wymuszenia typowania metody bez zwracania NULL.
Np taka klasa:
Pierwsza metoda (podejście o którym mówię) nigdy nie zwraca nulla, tylko obiekt lub rzuca wyjątek. Druga metoda (tradycyjna) zwraca obiekt lub null. Które podejście stosujecie? Dlaczego. Ja po rozmowie z kolegą zacząłem skłaniać się ku pierwszej wersji i brak możliwości zwrócenia oczekiwanego obiektu traktuję jako wyjątek.Podświadomie wydaje mi się to bardziej logiczne i wymusza trochę więcej dyscypliny. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Co do kwestii przyzwyczajeń to trochę rozumiem bo też na początku mi się było trudno przestawić, ale w sumie kodu wychodzi podobnie i z perspektywy jednak kod oparty o wyjątki jest bardziej czytelny. Jeśli funkcja może zwrócić 2 rezultaty (null albo object) to zawsze jakoś trzeba to obsłużyć - albo if albo try catch. Try/catch (po przezywyczajeniu) wydaje mi się bardziej czytelny, jeśli oczywiście stosujemy szczegółowe wyjątki a nie \Exception. Oczywiście kwestia gustu - z tym nie dystkutuję.
Co do zwracania pustej kolekcji to to jest moim zdaniem inny przypadek niż brak obiektu, bo pusta kolekcja/tablica może być traktowana polimorficznie tak samo jak tablica/kolekcja z elementami. Tj. można po niej iterować, przekazać jako parametr dalej, zwracany typ też się zgadza itp., a z obiektem, który nie jest nagle obiektem tylko nullem już tego nie zrobisz. Moim zdaniem zwracanie function(): ?object trochę przeczy typowaniu - bo po to typuję zwracany typ, żeby nie musieć sprawdzać czy otrzymuję ten typ. Ale oczywiście to tylko moje zdanie i widzę też zalety "starego" podejścia. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 07:12 |