Article View: pl.comp.objects
Article #14482Re: Wyrzucenie wyjątku, czy zwrócenie null?
From: Przemek Pokrywka
Date: Mon, 03 Apr 2006 21:09
Date: Mon, 03 Apr 2006 21:09
57 lines
4605 bytes
4605 bytes
Grzesiek G. napisał(a): > Ale zadanie wykonywane przez program to jest coś, co jest opisane w > jakimś dokumencie. Więc jeżeli nikt nie napisał, że sprawdzanie > istnienia pliku jest częścią zadania, to (według przedstawionej przeze > mnie teorii) jest sytuacją wyjątkową i można ją śmiało obsłużyć przez > catch. > > Co do tezy, że klient nie interesuje się tym co robi w środku metoda się > zgadzam. Jednak klienta interesuje jak robi. Więc jeśli robi zbyt wolno, > bo przebieg programu jest sterowany wyjątkami, to klient może się > zainteresować. Przedstawiona teoria jest dla mnie bardzo naciągana, z tego powodu, że klient, jeśli mu zależy na wydajności, to napisze o tym wprost, i to w odniesieniu do konkretnych przypadków użycia, a nie w postaci stwierdzeń na temat obsługi wyjątków w ciałach poszczególnych metod. Wyjątki mogą stanowić problem wydajnościowy w marginalnych wypadkach i tylko raport narzędzia typu profiler może stanowić przesłankę do zastąpienia ich czymś innym. Byłbym bardzo zainteresowany usłyszeniem o przypadku, w którym u kogoś to faktycznie obsługa wyjątków pod względem wydajności stanowiła wąskie gardło systemu, przez co system nie spełniał wymagań wydajnościowych postawionych mu przez klienta. Jeszcze raz za mistrzem Knuthem powtórzę, że "premature optimization is the root of all evil" > Takiego klienta, który to specyfikuje, też nie spotkałem, ale mam często > taki przypadek: klient chce żeby aplikacja importowała dane z pliku do > własnego serwera bazy danych. Import może się nie powieść z powodu > błędnej zawartości pliku. Błąd jest sygnalizowany przez serwer bazy > danych w sposób nieczytelny dla zwykłego użytkownika. Jeżeli użytkownik > chce widzieć błąd w sposób czytelny (bo np. plik jest tworzony ręcznie) > to i tak trzeba dorzucić ręczną walidację opartą na ifach. Jasne, bywa, że wyjątek wyrzucany przez sterownik JDBC, czy jakąkolwiek inną bibliotekę nie niesie ze sobą informacji istotnych z punktu widzenia użytkownika (choć bywa tak rzadko, bo przeważnie można taki wyjątek przechwycić, opakować w swój własny uzupełniający informację i obsłużyć go we właściwym miejscu programu). Czasem jednak tak bywa i walidację trzeba przeprowadzić wcześniej, gdy informacje interesujące użytkownika (np. zawartość pliku) są jeszcze dostępne. Jest to właśnie domena instrukcji typu "if" i nie zamierzam kwestionować ich użyteczności w tych zastosowaniach. Niemniej jednak uważam, że zastosowanie wyjątków jest lepsze, jeśli tylko w danym przypadku jest możliwe. > Ale co w sytuacji, gdy > wszystkie błędy wywoływania zapytań bazy danych zwracają wyjątek > SqlException? Zmienić bibliotekę? :-) Akurat do zapewniania obiektom trwałości w Javie jest spory wybór, jeśli chodzi o biblioteki. Można też kusić się o pisanie własnych klas opakowujących wywołania kodu bibliotek, wprowadzanie foreign methods, istnieje wiele różnych technik. -- Pozdrawiam, Przemysław Pokrywka
Technical Details
Message-ID:
<e0s2ub$brn$1@news.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mailReferences:
<e09c3r$lg3$1@news.onet.pl> <e09f0h$cis$1@news.task.gda.pl> <e09gjn$737$1@news.onet.pl> <e0b1re$bdc$1@news.onet.pl> <e0c8eh$ur8$1@news.onet.pl> <e0cd04$ljh$1@news.task.gda.pl> <e0ced6$f7g$1@news.onet.pl> <e0dabl$1sv$1@news.task.gda.pl> <87y7ytka81.fsf@qrnik.zagroda> <e0e8n1$ppe$1@news.task.gda.pl> <e0ef6i$h84$1@nemesis.news.tpi.pl> <e0ei45$p93$1@news.task.gda.pl> <e0ejpu$27n$1@news.onet.pl> <e0elnc$qp1$1@news.task.gda.pl> <e0elup$ad0$1@news.onet.pl> <e0gr7t$4h1$1@nemesis.news.tpi.pl> <e0k6te$c1b$1@news.onet.pl> <e0r5r0$9nk$1@nemesis.news.tpi.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail From: Przemek Pokrywka <adres@zastrzezony.com> Newsgroups: pl.comp.objects Subject: Re: Wyrzucenie wyjątku, czy zwrócenie null? Date: Mon, 03 Apr 2006 23:09:22 +0200 Organization: Onet.pl Lines: 57 Message-ID: <e0s2ub$brn$1@news.onet.pl> References: <e09c3r$lg3$1@news.onet.pl> <e09f0h$cis$1@news.task.gda.pl> <e09gjn$737$1@news.onet.pl> <e0b1re$bdc$1@news.onet.pl> <e0c8eh$ur8$1@news.onet.pl> <e0cd04$ljh$1@news.task.gda.pl> <e0ced6$f7g$1@news.onet.pl> <e0dabl$1sv$1@news.task.gda.pl> <87y7ytka81.fsf@qrnik.zagroda> <e0e8n1$ppe$1@news.task.gda.pl> <e0ef6i$h84$1@nemesis.news.tpi.pl> <e0ei45$p93$1@news.task.gda.pl> <e0ejpu$27n$1@news.onet.pl> <e0elnc$qp1$1@news.task.gda.pl> <e0elup$ad0$1@news.onet.pl> <e0gr7t$4h1$1@nemesis.news.tpi.pl> <e0k6te$c1b$1@news.onet.pl> <e0r5r0$9nk$1@nemesis.news.tpi.pl> NNTP-Posting-Host: 041.inet.polhost.pl Mime-Version: 1.0 X-Trace: news.onet.pl 1144098571 12151 80.48.120.41 (3 Apr 2006 21:09:31 GMT) X-Complaints-To: usenet@news.onet.pl NNTP-Posting-Date: Mon, 3 Apr 2006 21:09:31 +0000 (UTC) X-Sender: 5aB4pqMdeQG1O30L902dNmlAzoKeNKcS In-Reply-To: <e0r5r0$9nk$1@nemesis.news.tpi.pl> X-Accept-Language: pl, en-us, en User-Agent: Mozilla Thunderbird 1.0.2 (Windows/20050317) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit