On Error Resume Next   zodpovězená otázka

VB.NET, .NET

Zdravím, zajímalo by mne, zda je příkaz

On Error Resume Next

přežitkem z VB6, anebo je to nový příkaz z platformy .NET?

Trochu se mi zdá, že je to víceméňe podobné s

Try

Catch ex As Exception

End Try

akorát to nevrátí příčinu výjimky?

Ptám se proto, protože mi to poradil programátor VB6.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

On Error Resume Next by se ve VB.NET používat neměl. Je to přežitek ještě ze starého BASICu, těžko říci, proč jej ve VB.NET stále drží. A navíc právě On Error Resume Next vede k velmi prasáckému stylu programování - jednoduše ignoruje všechny chyby.

Ve Visual Basic .NET je dnes doporučenou konstrukcí Try..Catch. Funguje to velmi podobně, pokud za slovem Try nastane chyba, provede se část Catch. Výhodou tohoto systému je, že můžete rozhodnout, kde se chyba zachytí a případně použitím slova Finally provést

další příkazy nezávisle na tom, zda-li chyba nastala nebo ne.

Pokud byste chtěl pomocí staré konstrukce nějak reagovat na nastalou chybu, není to možné (při Resume Next). Je možné sice provést On Error Goto chyba, ale příkaz GoTo, který skáče v kódu na označené místo, je dalším přežitkem, kterému bychom se také měli vyhnout (kromě opravdu ojedinělých případů).

Shrnul bych to asi takhle: Používejte Try..Catch, je to doporučený postup. On Error... není čisté řešení na .NET platformě.

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

On Error Resume Next je tam samozřejmě z hlediska kompatibility se starými aplikacemi a jsem přesvědčen, že interně se stejně překládá na Try...Finally.

Spousta lidí dokáže prasácky používat i Try Catch a to tak, že napíše:

Try
  'Kritický kód
Catch ex As Exception
  'Zachycení OBECNÉ vyjímky
  '= podobná prasárna jako On Error Resume Next
End Try

VŽDY se snažíme odchytit KONKRÉTNÍ vyjímku (např. IOException) a na ní nějakým způsobem reagovat...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Zachytit a ošetřit obecnou výjimku nemusí být vždy zase až tak prasácké - pokud potřebuji třeba ve webové aplikaci něco vytáhnout z databáze a nepovede se to, tak uživateli může být vlastně jedno, jestli nastala chyba sítě, nebo jestli spadnul databázový server, nebo jestli mám špatně SQL dotaz. Stačí chytit obecnou výjimku a vypsat mu nějakou chybovou hlášku. Do logu si pak uložím stack trace, abych věděl, co se stalo. Uživateli to ovšem může být úplně jedno, k datům se nedostanu a je jedno, jestli indiáni vytrhali kabely mezi webserverem a databázovým serverem, nebo databázový server spadnul.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback