Article View: pl.comp.objects
Article #14483Re: Wyrzucenie wyjątku, czy zwrócenie null?
From: Grzesiek G.
Date: Wed, 05 Apr 2006 14:22
Date: Wed, 05 Apr 2006 14:22
74 lines
4534 bytes
4534 bytes
Przemek Pokrywka napisał(a):
> 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.
Aż dziw mnie bierze (i przyznam że zazdroszczę) :-), że się nie
spotkałeś ani razu :-). Miałem do wykonania program walidujący i
importujący plik csv do bazy danych. Wyjściem z nieudanej walidacji był
raport błędów. Program był zrobiony tak, że przetwarzał plik do
struktury obiektowej, którą obrabiał i zapisywał w bazie. Plik był
poprawny, jeśli dawał się przekształcić do struktury obiektowej.
Niestety, rzeczywiste pliki okazały się fatalne. Tworzyło je pare osób w
MS Office i różnych Open Officach, także walidacja stała się ważna. Co
gorsza za długo trwała (kilka minut), co bardzo złościło klienta. Była
napisana poczętkowo w stylu:
try
{
zmienna = decimal.Parse(napis);
...
}
catch(InvalidFormatException exc)
{
logger.log("Nie można skonwertować ...);
}
została przepisana na:
if(decimal.TryParse(napis)
{
zmienna = decimal.Parse(Napis);
}
else
{
logger.log("Nie można skonwertować ...);
}
Czas wykonania walidacji skrócił się do kilkudziesięciu sekund.
> Jeszcze raz za mistrzem Knuthem powtórzę, że "premature optimization is
> the root of all evil"
>
Z tą tezą też się zgadzam. Ale jeżeli np. w naszej aplikacji WWW strony
ładują się u klienta kilkadziesiąt sekund, to nie czekamy na
uzupełnienie specyfikacji uwagami o wydajności, tylko bierzemy się do
pracy. Często wystarczy wyłączyć emula u użytkowników sieci klienta, ale
czasami trzeba poprawić nasz soft.
Pozdrawiam
--
Grzegorz Gruza
Odpowiadając usuń "spamerom_nie." z adresu!!!
Technical Details
Message-ID:
<e10jsb$9i1$1@atlantis.news.tpi.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.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> <e0s2ub$brn$1@news.onet.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail From: "Grzesiek G." <gruza@spamerom_nie.priv4.onet.pl> Newsgroups: pl.comp.objects Subject: Re: Wyrzucenie wyjątku, czy zwrócenie null? Date: Wed, 05 Apr 2006 16:22:50 +0200 Organization: tp.internet - http://www.tpi.pl/ Lines: 74 Message-ID: <e10jsb$9i1$1@atlantis.news.tpi.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> <e0s2ub$brn$1@news.onet.pl> NNTP-Posting-Host: hostr.bielbit.com.pl Mime-Version: 1.0 X-Trace: atlantis.news.tpi.pl 1144246987 9793 195.117.206.2 (5 Apr 2006 14:23:07 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Wed, 5 Apr 2006 14:23:07 +0000 (UTC) User-Agent: Mozilla Thunderbird 1.0.2 (Windows/20050317) X-Accept-Language: pl, en-us, en In-Reply-To: <e0s2ub$brn$1@news.onet.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit