![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 1 Dołączył: 6.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Chciałem się dowiedzieć, kiedy NALEŻY stosować wyjątki w OOP? Chodzi mi o konkretne przykłady i jakieś dobre wytłumaczenie.
Wyjątki jak sama nazwa wskazuje, ale np . Kod $a=5; $b=0; if($a<$5){ ... } Też mogli byśmy użyć wyjątków? i czy powinno się? bless |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
@Orzeszek: Nie widzę problemu by wyjątki były wewnętrznym sposobem na implementację obsługi błędów. Zauważ bowiem, że jak napisałem, wyjątek jest podzbiorem błędów, których wystąpienie jest problematyczne lub niemożliwe do wychwycenia. Możemy się jednak nimi posłużyć by sytuacja stała się przewidywalna.
Wyjątek jest pewną reprezentacją błędu z racji tego, iż jest jego podzbiorem. Czy więc jest różnica w tym, że zwrócę obiekt klasy Object z komunikatem czy obiekt klasy Exception dziedziczący po Object z dokładnie tym samym komunikatem? To już nieistotna forma reprezentacji. A tak właśnie wygląda to w językach, które nazywasz obiektowymi. Inne opakowanie na dokładnie to samo. I dokładnie to samo stwierdzasz dalej pisząc, że " To po prostu informacja o tym ze cos idzie nie tak podana w roznym opakowaniu." i tym samym zwrócenie null, false, komunikatu, czy obiektu określonej klasy to tylko nieistotne opakowanie. Ja bowiem piszę nie o tym czy obiekt zwracany jest nullem, intem czy obiektem klasy ale logiką tego co jest błędem, a co sytuacją wyjątkową i do czego mechanizm wyjątków powinien być stosowany tak naprawdę. By podać jakiś przykład bardziej "ludzki" z walidacją... Skoro mogę wykryć błąd poprawności danych poprzez choćby użycie wyrażenia regularnego, to mogę to zrobić w dowolny sposób, niekoniecznie od razu sięgając do wyjątków, by zasygnalizować to aplikacji. Jest to owszem forma wygodna, ale zaczyna się niebezpiecznie zbliżać do kontroli przepływu, a nie po to ten mechanizm wymyślono. Tutaj w zupełności wystarczy zwykły IF. Co gorsze, wyjątki w momencie zaistnienia wyskakują z normalnego przebiegu by znaleźć najbliższy pasujący blok catch. Myślisz, że pisanie Java to od razu "ach i och"? Mało to ja widziałem kodów gdzie było try{ // różne operacje; } catch ( Exception zmienna ) { //kompletnie nic } //dalsze operacje; a całość byle tylko wyjątek złapać i ukryć dla postronnych. Brzydki hack, ale wbrew pozorom często stosowany, nie tylko wśród początkujących. Czym to się różni od @ w PHP? Niczym. Jedyna różnica to fakt, że w PHP nie ma ujednolicenia co jest błędem, a co wyjątkiem. Zaś w takiej Javie każdy błąd = wyjątek. Co moim zdaniem jest zbyt dużym uogólnieniem, byle tylko ułatwić pewne rzeczy w czasie programowania. Tyle że kosztem tego jest to, iż nieraz by coś było można normalnie obsłużyć, trzeba wykonać choćby kilka rzutowań po drodze. Co do pisania handlerów to akurat swój kod pisać potrafię na tyle, że nie potrzebuję małpek czy error handlerów zamieniających error na exception, to raz. A dwa, że error handler którego jedynym celem jest zamiana komunikatu na obiekt klasy Exception to dla mnie bezsens. Nic mi on nadal bowiem mówić nie będzie poza samym komunikatem. Nie po to są wyjątki i błędy by sobie jedne drugimi zastępować, skoro mają ciutkę inny zakres kompetencji. Poza tym trudno powiedzieć o naleciałościach PHP-owych, skoro poznałem go kilka lat po tym, gdy już pisałem w C++ czy Javie, a na forum narzekam na PHP i jego idiotyzm czy braki w porównaniu do innych języków, głównie C++ |
|
|
![]() ![]() |
![]() |
Aktualny czas: 2.10.2025 - 18:55 |