-
X-Received: by 2002:ac8:4a08:: with SMTP id x8mr18407193qtq.353.1586122265284; Sun,
05 Apr 2020 14:31:05 -0700 (PDT)
X-Received: by 2002:ac8:4a08:: with SMTP id x8mr18407193qtq.353.1586122265284; Sun,
05 Apr 2020 14:31:05 -0700 (PDT)
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.samoylyk.n
et!weretis.net!feeder7.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.
160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google
-groups.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Sun, 5 Apr 2020 14:31:05 -0700 (PDT)
In-Reply-To: <20200404215133.35e6e612@mateusz>
Complaints-To: g...@g...com
Injection-Info: google-groups.googlegroups.com; posting-host=213.108.152.51;
posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S
NNTP-Posting-Host: 213.108.152.51
References: <5...@g...com>
<20200404215133.35e6e612@mateusz>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <b...@g...com>
Subject: Re: Czy biblioteka powinna rzucać wyjątki?
From: Maciej Sobczak <s...@g...com>
Injection-Date: Sun, 05 Apr 2020 21:31:05 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Xref: news-archive.icm.edu.pl pl.comp.programming:214812
[ ukryj nagłówki ]
> > Spotkałem się też z opinią, że biblioteka nie powinna rzucać
> > wyjątków, bo w ten sposób narzuca ten aspekt interfejsu aplikacji -
> > ale już aplikacja końcowa może sobie korzystać z wyjątków (które sama
> > sobie zdefiniuje, sama rzuci i sama złapie), bo nikomu innemu tego
> > nie narzuca.
>
> Podzielam ten pogląd. Korzystając z biblioteki, oczekuję maksymalnie
> uproszczonego działania, które nie zakłóci mi mojego workflow.
> Łapanie wyjątków jest mi w tym kontekście wyjątkowo nie po drodze. Inna
> sprawa, że w praktyce - jak zauważyłeś - jest jak jest.
Ale zauważmy, że biblioteki też korzystają z bibliotek - i w ten sposób można
wytłumaczyć wyjątek out_of_memory: winę ponosi kto inny.
Weźmy np. bibliotekę do wysyłania maili. Powiedzmy, że zgodnie w powyższymi regułami
ona sama w sobie nie rzuca wyjątków, ale korzysta z innych bibliotek, w szczególności
z podstawowej biblioteki run-time, gdzie jest operator new. I tenże operator rzuca
wyjątek. Jeżeli biblioteka do maili jest poprawnie napisana, to będzie wewnętrznie
exception-safe, czyli przepuści wyjątki z niższych warstw (z operatora new),
pozostając sama w jakimś spójnym stanie. Przy takiej interpretacji można uznać, że
reguły są spełnione.
Jest jeszcze pomysł na funkcje callback, które są wołane w różnych awaryjnych
sytuacjach. Taki callback daje użytkownikowi możliwość np. logowania problemów wtedy
gdy występują, albo nawet rzucenia własnego wyjątku, właśnie po to, żeby go sobie
złapać gdzie indziej na poziomie tej samej aplikacji. Wtedy znowu mamy spełnione
reguły, że biblioteka sama z siebie nie rzuca wyjątków, ale je toleruje, jeśli jakieś
przez nią przelatują.
Na pewno nie jest łatwo takie biblioteki pisać, ale może to być jakiś ideał, którym
można się w miarę możliwości kierować.
--
Maciej Sobczak * http://www.inspirel.com
Najnowsze wątki z tej grupy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
Najnowsze wątki
- 2025-02-21 Warszawa => Key Account Manager IT <=
- 2025-02-21 Warszawa => Data Engineer (Tech Lead) <=
- 2025-02-21 Aliexpress zaczął oszukiwać na bezczelnego.
- 2025-02-21 Warszawa => System Architect (Java background) <=
- 2025-02-21 Kula w łeb
- 2025-02-21 Warszawa => System Architect (background deweloperski w Java) <=
- 2025-02-21 Warszawa => Solution Architect (Java background) <=
- 2025-02-21 Lublin => JavaScript / Node / Fullstack Developer <=
- 2025-02-21 Pawel S
- 2025-02-21 Warszawa => Key Account Manager (Usługi HR) <=
- 2025-02-21 Katowice => Senior Field Sales (system ERP) <=
- 2025-02-21 Chrzanów => Programista NodeJS <=
- 2025-02-21 Wrocław => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-02-21 Warszawa => Administrator Systemów Windows IT <=
- 2025-02-21 Wrocław => Specjalista ds. Sprzedaży (transport drogowy) <=