NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.

Diskuze – Lekce 1 - Výjimky

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:16.6.2012 18:19

Jo, chápu :) Ale nesváděl bych to na MS, mám za to, že Java to má stejně.

Odpovědět
16.6.2012 18:19
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:16.6.2012 19:43

V tom případě to má Java úplně stejně špatně. Logická a fyzická likvidace objektů musí být odděleně.

Objekty v PHP jsou často kritizovány, ale tohle v něm funguje skvěle. I v Pythonu je možné si vytvořit vlastní destruktor. Tím vlastně odpadá potřeba bloků finally, protože jsou tím zbytečné. Stačí jeden destruktor pro celý objekt.

Je na tom vidět, kam až vede honba za výkonem aplikace.

Odpovědět
16.6.2012 19:43
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
relycanx
Člen
Avatar
relycanx:5.4.2013 11:19

Chtěl bych se zeptat konkrétně na tento příklad:

try
{
        Console.WriteLine(Matematika.Podil(a, b));
}
catch
{
        Console.WriteLine("Při dělení nastala chyba.");
}

Asi jen špatně koukám, ale nevidím souvislost s tou nulovou podmínkou. Jak to v tomto případě může vyhodit chybu, když tam není podmínka? Jako jinak využití příkazů try a catch myslím chápu. Když se např. soubor v počítači nenajde, tak to vyplivne catch a nemusí tam být vyloženě zadaná podmínka, ale tady prosím o vysvětlení, jestli můžu :)

 
Odpovědět
5.4.2013 11:19
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na relycanx
Petr Nymsa:5.4.2013 11:33

Nelez dělit nulou, proto vyskočí vyjímka :)

Odpovědět
5.4.2013 11:33
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
relycanx
Člen
Avatar
Odpovídá na Petr Nymsa
relycanx:5.4.2013 11:49

Jo takhle, takže to bere Virtual Studio jako samozřejmost, chápu, dík :) Já právě nevěděl, jestli má tuto podmínku v paměti.

 
Odpovědět
5.4.2013 11:49
Avatar
Kit
Tvůrce
Avatar
Odpovídá na relycanx
Kit:5.4.2013 13:30

Obvykle se nebalí každý riskantní příkaz do jednoho try..catch, ale téměř vždy nějaký blok příkazů. Často se ani neošetřuje uvnitř metody, ve které může k výjimce dojít.

Odpovědět
5.4.2013 13:30
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
relycanx
Člen
Avatar
Odpovídá na Kit
relycanx:5.4.2013 13:44

No pochopil jsem to asi tak, že try je jakási "databáze" podmínek a když z nich jedna nesouhlasí, tak to vyhodí catch a proto je celý ten blok try-catch pomalejší, protože se musí nejdříve vyhodnotit celý ten seznam, je to tak, nebo jsem vedle? :D

 
Odpovědět
5.4.2013 13:44
Avatar
Kit
Tvůrce
Avatar
Odpovídá na relycanx
Kit:5.4.2013 13:50

Jsi vedle. try..catch je rychlejší.

Výjimka není databáze, ale objekt.

Odpovědět
5.4.2013 13:50
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
relycanx
Člen
Avatar
Odpovídá na Kit
relycanx:5.4.2013 14:00

ajaj :D :) a dají se tam nějakým způsobem vkládat další, individuální podmínky, aby se dala vyjímka používat celkově jako zábrana proti chybám namísto if?

 
Odpovědět
5.4.2013 14:00
Avatar
Kit
Tvůrce
Avatar
Odpovídá na relycanx
Kit:5.4.2013 14:05

Jistě. Na to je klíčové slovo throw. Jenom si musíš dát pozor, abys pomocí výjimek nedělal flow-control. Program by se ti zpomalil a je to špatně i z hlediska návrhu. Výjimky musí zůstat výjimkami, musí k nim docházet jen při výjimečných situacích a při chybách.

Výjimkou je např. i chybně vyplněné formulářové pole uživatelem nebo špatný parametr programu, ale určitě ne podmínka pro ukončení cyklu.

Odpovědět
5.4.2013 14:05
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 10 zpráv z 27.