Portál AbcLinuxu, 6. května 2024 01:01


Dotaz: kdy (ne)používat try

16.5.2018 13:41 Alex
kdy (ne)používat try
Přečteno: 315×
Odpovědět | Admin
Ahoj,právě se učím Javu a chtěl bych vědět, jestli je dobré používat výjimku pro čtení ze vstupu Scnanneru metodou nextInt(). Myslím, že v Javě od Herouta jsem to tak viděl (neuspěje->chytne catch->smaže až do bílého znaku->čte další), ale někde jsem pak čet, že by se to s try nemělo přehánět a tady se to dá před načtením nejdřív otestovat pomocí hasInt(). Omlouvám se za hloupý dotaz, Java je můj první programovací jazyk a nerad bych si vytvářel nějaké špatné návyky hned na začátku. Díky za radu.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.5.2018 13:56 Sten
Rozbalit Rozbalit vše Re: kdy (ne)používat try
Odpovědět | | Sbalit | Link | Blokovat | Admin
hasInt se používá, pokud budete nějak zpracovávat vstup, kde číslo není, případně pokud takový vstup je validní, ale vy jej jenom přeskakujete. Pokud budete zpracovávat jenom čísla a jiné věci na vstupu nemají být, tak try … catch je dobré řešení, protože je na první pohled vidět, že ne-čísla nejsou očekávaný vstup. V zásadě try … catch se používá pro zachycení situací, ke kterým by nemělo docházet, neměl by být součástí běžného běhu programu.
16.5.2018 14:01 Sten
Rozbalit Rozbalit vše Re: kdy (ne)používat try
Jinak i pro tohle pravidlo existují výjimky, třeba kontrola null se běžně dělá pomocí if místo try … catch (NullPointerException), protože těch kontrol může být hodně za sebou, co by znamenalo hodně zanoření a špatnou čitelnost.
16.5.2018 22:21 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: kdy (ne)používat try
K zanoření vůbec nemusí dojít, pokud jsou tyto kontroly řazeny lineárně za sebou v jednom bloku try-catch. Čitelnosti to nejenže neubírá, ale dokonce vyloženě prospívá.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
16.5.2018 14:11 Alex
Rozbalit Rozbalit vše Re: kdy (ne)používat try
Právě že se čte z klávesnice na výzvu zadejte N čísel v cyklu s try-catch. Žádná validace tam není. Smazat se to co není číslo musí, jinak by se to zacyklilo. Celé mi to zatím přijde dost složité a nelogické, když tam můžu použít hasInt() přímo v hlavičce toho cyklu.
16.5.2018 15:20 Sten
Rozbalit Rozbalit vše Re: kdy (ne)používat try
Pokud je výzva „Zadejte N čísel“, tak ne-čísla nejsou očekávaný vstup a ošetřovat je přes try … catch je IMO správně.
16.5.2018 15:25 Sten
Rozbalit Rozbalit vše Re: kdy (ne)používat try
Důvod pro výjimku je taky výkon, pokud použijete hasInt, tak to musí projít vstup a zjistit, jestli je to číslo, přičemž v dalším kroku (parsování) se prochází a zkoumá ten samý vstup znovu. Při použití výjimky se ten vstup prochází jen jednou, což je, pokud je tam číslo, rychlejší. Pokud nečekáte ne-čísla (rollback při výjimce je pomalý), tak je vhodné preferovat výjimky.
16.5.2018 16:25 Alex
Rozbalit Rozbalit vše Re: kdy (ne)používat try
Díky. A nebylo by pak lepší, pokud bude číslo zadávané vždy na nový řádek, použít FileReader() a parseInt()? Zdá se mi to jako nejčistší a asi i nejrychlejší v tomto případě.
16.5.2018 16:53 Alex
Rozbalit Rozbalit vše Re: kdy (ne)používat try
S tím, že by se zadávala ne-čísla, se počítá spíš tak, že by uživatel mohl odentrovat nějaké prázdné řádky. To mi třeba nepřijde až zas taková chyba, která by si zasloužila výjimku, ale nevím.
16.5.2018 22:25 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: kdy (ne)používat try
Scanner bílé znaky při čtení čísel ve většině jazyků jednoduše přeskakuje.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.