Detta är en fråga som jag har diskuterat med ett flertal under de senaste åren. Låt mig få göra ett inlägg i den debatten.
1. Det första som felet som man gör med exceptions är att man likställer detta med fel. Men exceptions är snarare undantag emot den förväntade, alltså något som inte är förutsätt. (Naturligtvis kan det vara ett fel, men det behöver inte vara det.)
[Uppdaterat 2004-04-27]
Jeffrey Richter definierar en exception på följande sätt i sin bok Applied Microsoft .NET Framework Programming:
The interface you define carries with it some implicit assumptions. An exception occurs whan an assumption made by your programming interface is violated.(s. 402)
Ifrån MSDN:
You should only throw exceptions when a condition outside of your code's assumptions occurs. In other words, you should not use exceptions as a means to provide your intended functionality. For example, a user might enter an invalid user name or password while logging on to an application. While this is not a successful logon, it should be a valid and expected result, and therefore should not throw an exception. However, an exception should be generated if an unexpected condition occurs, such as an unavailable user database.
2. Det andra felet är att man kan bli frestad att använda exceptions för att på något sätt kontrollera programflödet i den exekverbara koden. Tänk på att det är kostsamt att kasta exceptions. Detta skall endast göras i undantagsfall. Använd det exempelvis inte för att i en rutin kontrollera att en teckensträng är ett tal eller dylikt.
3. Det tredje felet är att man bara kastar vidare ett exception utan att ha gjort någonting med den. Detta är helt onödigt. Detta är nog vanligast inom Visual Basic-världen. Där var man för, på VB6-tiden, van med att bygga in en felhanteringsrutin i slutet på varje funktion. Detta överför man till .NET och har en Try…Catch bara för att man tror att man måste ha det.
(Jag kommer att beskriva ett ytterligare problem med detta i ett senare inlägg där jag visar på att det här mönstret också förstör den viktiga Stack-tracen som man annars kan använda för att få mer information om det som har skett.)
Recent Comments