Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Petr Nymsa
Tvůrce
Avatar
Petr Nymsa:30.11.2013 13:26

Zdravím, občas přemýšlím co je z hlediska implementace lepší použít. Někdy mám například metodu která má něco provést, někdy metoda úlohu neprovede (například nejsou splněny všechny požadavky).
Je jasné, že pokud i uvnitř metody může dojít k výjimce, je lepší zachytit výjimku v té metodě a zpropagovat dál. Ale, občas jsme si 99% jistí, že v dané metodě k výjimce nedojde, pouze se úkon provede nebo provede. Není po tom jednodušší aby metoda vracela BOOL, tedy TRUE = vše proběhlo v pořádku, FALSE = neproběhlo v pořádku, ale mě je jasné proč (v metodě se dělá například jenom jeden úkon).

Zpravidla používám vždy výjimky, ale chci se takhle zeptat, vždy výjimky nebo někdy "jednodušší" způsob pouhým vrácením BOOL ?

Odpovědět
30.11.2013 13:26
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Zdeněk Pavlátka:30.11.2013 13:33

bool se vracelo v jazyce C. :D Ale u spousty metod se vyplatí bool více(rychlost, přehlednost) - např tryParse...

Nahoru Odpovědět
30.11.2013 13:33
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Petr Nymsa
Kit:30.11.2013 13:40

Výjimky se v zásadě používají vždy, pokud je něco špatně, i kdyby to mělo být v polovině případů. Pokud selže připojení k databázi, je to výjimka. Pokud je chyba v SQL dotazu, je to výjimka. Pokud někdo ve formuláři místo čísla domu napíše ulici, je to také výjimka.

Naopak se výjimky nemají používat k řízení toku programu. Ukončovat cyklus nebo metodu výjimkou, když vše proběhlo OK, se prostě nemá. Pokud proces proběhne přesně tak jak má, nikdy by k vyhození výjimky nemělo dojít.

Nahoru Odpovědět
30.11.2013 13:40
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Zdeněk Pavlátka
Petr Nymsa:30.11.2013 13:40

Mě je jasný že Výjimky je lepší způsob, ale občas mě přijde že pouhé vracení bool je přehlednější, sám jak říkáš, třeba tryParse

Nahoru Odpovědět
30.11.2013 13:40
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Petr Nymsa
Jan Vargovský:30.11.2013 13:42

Používám oboje :)

 
Nahoru Odpovědět
30.11.2013 13:42
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Kit
Petr Nymsa:30.11.2013 13:49

Jasný :) A co například použití v této situaci.
metoda načítá data (metoda jménem NactiData) například ze souboru. Uvnitř NactiData mám Try/Catch blok ale zvenku, tedy kde metodu volám, chci vědět pouze jestli se načetlo či ne (true / false). Je lepší výjimku z metody NactiData zpropagovat dál, nebo aby vracela bool ?

Nahoru Odpovědět
30.11.2013 13:49
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Drahomír Hanák:30.11.2013 13:54

Obvykle když načítám data, chci ta data. Pokud se nenačtou, tak je to prostě chyba. Nenapadá mě teď situace, kdy bych potřeboval načítat něco, co vlastně nechci. Jinak by se tedy vracel boolean, ale rozhodně bych metodu v tomhle případě nepojmenoval NactiData.

 
Nahoru Odpovědět
30.11.2013 13:54
Avatar
Odpovídá na Petr Nymsa
Zdeněk Pavlátka:30.11.2013 13:54

Já mám radši bool - takže bych ho určitě použil.

Nahoru Odpovědět
30.11.2013 13:54
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Petr Nymsa
Kit:30.11.2013 13:58

V tomto případě je zpravidla lepší tu výjimku v metodě vůbec nezachytávat a vypropagovat ji ven. Získáš tím i důvod, proč se data nenačetla a můžeš ho ze všech možných výjimek zachytit jedním catch a zalogovat nebo vypsat v dialogovém okně.

Výhodou je, že po návratu z metody, která může selhat, nemusíš vůbec nic testovat. Ani ten bool, ani výjimku. Tu si můžeš ošetřit klidně o pár úrovní výš. Aplikace se tím hodně zjednoduší.

Nahoru Odpovědět
30.11.2013 13:58
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
Petr Nymsa:30.11.2013 13:59

Mám to ve Wrapperu, tedy takový Manager, který data drží a já pouze chci pouze říct, ať teď ty data načte. Manager mi ty data drží, umí je načíst i uložit. Takže ta metoda mi data nevrací, pouze říká a teď ty data načti. Tím pádem mě spíše zajímá akorát jestli se mu data podařila načíst.

Nahoru Odpovědět
30.11.2013 13:59
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na Petr Nymsa
Jakub Lásko[Saarix]:30.11.2013 14:02

Toť otázka :-) asi bych tady neviděl problém v použití bool, pokud prakticky řešíš jen zda se data načetla či ne. Možná ale pokud budeš zohledňovat nějaký jiný postup u toho, když by ti NactiData třeba vyhodilo chybu soubor neexistuje (zdroj), tak pak je asi na zvážení, zda u této chyby nějak jinak zakročíš.
Pokud ne, tak je asi určitě lepší použít bool.

Editováno 30.11.2013 14:03
Nahoru Odpovědět
30.11.2013 14:02
Časem je vše možné.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Petr Nymsa
Kit:30.11.2013 14:02

Jenže tebe nezajímá, jestli se data podařilo načíst. Dal jsi metodě rozkaz a ten musí splnit. Pokud ho nesplní, je to výjimka.

Nahoru Odpovědět
30.11.2013 14:02
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Kit
Petr Nymsa:30.11.2013 14:04

Hmm, to je právě co občas řeším :). Ale z 90% výjimky používám. Takže asi i zde bude lepší výjimku zpracovat.

Nahoru Odpovědět
30.11.2013 14:04
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Jakub Lásko[Saarix]
Kit:30.11.2013 14:05

Jenže výsledek toho bool musí zbytečně testovat a musí na výsledek nějak reagovat. To jen znepřehlední aplikaci.

Nahoru Odpovědět
30.11.2013 14:05
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Petr Nymsa
Theodor Johnson:30.11.2013 14:15

Nemusíš nutně vracet bool, můžeš přeci rovnou vrátit zprávu s chybou a testovat ji na hodnotu null

Nahoru Odpovědět
30.11.2013 14:15
Mo8ilε 15 Ѐλđ
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Petr Nymsa
David Hartinger:30.11.2013 14:17

Všechny chyby bys měl řešit přes výjimky, protože od toho v jazyce jsou. Koukni se na PHP, je tam vidět, co se stane, když se míchá výstup s chybovou hodnotou.

Nahoru Odpovědět
30.11.2013 14:17
You are the greatest project you will ever work on.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na David Hartinger
Petr Nymsa:30.11.2013 14:18

Dobrá, přesvědčili jste mě úplně :)

Nahoru Odpovědět
30.11.2013 14:18
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Theodor Johnson
Kit:30.11.2013 14:23

Pokud metoda vrátí null, proběhla OK? To bych ještě překousl, ale nepřekousnu, když dostanu hlášení o chybě datovým informačním kanálem místo chybového. Víš, jak blbě se to pak dál zpracovává?

Nahoru Odpovědět
30.11.2013 14:23
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Kit
Theodor Johnson:30.11.2013 14:38

Nevím jak těžký je pro tebe zpracovat instanci Systém.Exception

Nahoru Odpovědět
30.11.2013 14:38
Mo8ilε 15 Ѐλđ
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Theodor Johnson
Kit:30.11.2013 14:45

Když už mám výjimku, tak nemusím zpracovávat žádný boolean či null.

Nahoru Odpovědět
30.11.2013 14:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na Kit
Theodor Johnson:30.11.2013 14:51

V tom s tebou souhlasím, já jsem měl na mysli spíš návratovou hodnotu metody

Nahoru Odpovědět
30.11.2013 14:51
Mo8ilε 15 Ѐλđ
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Theodor Johnson
Kit:30.11.2013 15:34

Může být klidně void.

Nahoru Odpovědět
30.11.2013 15:34
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 22 zpráv z 22.