C# Exceptions deel II
In C# Exceptions hebben we gezien hoe we een programma gecontroleerd kunnen laten stuk lopen. Maar hier eindigd de reis niet. Nu we vantevoren al hebben vastgesteld waar het programma vast zou kunnen lopen, kunnen we deze fouten ook gelijk gaan rechtzetten.
Try catch
Voor dit process is de try catch bedacht. Hiermee can een stuk code worden uitgevoerd. Mocht er een exception worden gegooid in deze code, dan wordt deze fout âopgevangenâ. Het programma voert een alternatieve actie uit wanneer de fout wordt gevonden en gaat vervolgens verder alsof er niks aan de hand is. Dit levert de volgende code op.
try {
// 1. Code van een programma
throw new Exception(âCrash!â);
// 2. Meer code
} catch (Exception e) {
// 3. Alternatieve code
}
Hierbij zal eerst stap 1 worden uitgevoerd. Hierna wordt de exceptie gegooid (In een normaal programma wordt dit uiteraard alleen gedaan onder specifieke omstandigheden). Vervolgens wordt punt 3 uitgevoerd. Opmerkelijk in dit voorbeeld is dat zowel de code die fout loopt als punt 2 worden overgeslagen. De code bij punt 3 zal er vervolgens voor moeten zorgen dat het programma alsnog in goede banen wordt geleid. Alles wat na de âcatchâ komt wordt vervolgens weer normaal uitgevoerd en de daadwerkelijke crasht is voorkomen.
Aangepaste Exceptions
Het is echter nog mogelijk om verder specificeren wat er fout gaat in het programma. Hiermee kunnen betere maatregelen getroffen worden bij het herstellen van deze fouten. Dit wordt gedaan doormiddel van een aangepaste versie van een Exception, bijvoorbeeld:
public class IncorrecteEmailException: Exception {
}
public class IncorrecteAdresException : Exception {
}
Dit zijn twee nieuw aangemaakte Exceptions voor in dit geval het controleren van ingevoerde gegevens. Vervolgens kan bij het opvangen van de Exceptions onderscheid gemaakt worden in het type Exception. Zo zou bijvoorbeeld voor de âIncorrecteEmailExceptionâ een specifieke melding aan de gebruiker kunnen worden getoond over dat het e-mail adres incorrect is. Dit zou tot de volgende code leiden:
public IactionResult slaGebruikersGegevensOp(UserData gebruikersGegevens)
{
try {
// controleer gegevens
if ( incorrecteEmail( gebruikersGegevens ) ) {
throw new IncorrecteEmailException(âEmail was onjuist ingevoerdâ);
}
if ( incorrecteAdressGegevens( gebruikersGegevens ) ) {
throw new IncorrecteAdresException (âAdres was onjuist ingevoerdâ);
}
// sla de gegevens op
} catch (IncorrecteEmailException e) {
// toon de gebruiker een foutmelding dat de opgegeven email niet correct is
} catch (incorrecteAdressGegevens e)
// toon de gebruiker een foutmelding het opgegeven adres incorrect is
} catch (Exception e) {
// ongespecificeerde fouten
// geef een algemene waarschuwing dat iets niet goed ging
// of laat het herstel hiervan over aan bovenliggende code
throw;
}
}
Aan het eind van dit stuk code wordt gekeken of er een Exception is die niet herkend wordt. Er kan hierbij worden gekozen om een algemene foutmelding te geven of om het afhandelen hiervan over te laten aan een hoger niveau.
Het uiteindelijke doel van dit systeem is het voortijd afhandelen en oplossen van fouten, of het op de hoogte stellen van een gebruiker over deze fouten.