Een tijd geleden was er op irc een nogal "verhitte en heftige" discussie over het gebruik van exceptions in c++.
Ik heb toen naar zowel broeckie als naar Kelly gemaild. Intussen heb ik van beide een antwoord gekregen, dit wil ik nu met jullie delen:
Broeckie:
Code: Select all
Beste Kevin,
Het gaat bij exceptions idd om de uitzonderlijke gevallen. Foutieve user input valt hier m.i. niet onder.
Het valt er niet onder omdat het no relatief vaak kan voorkomen en omdat zonder meer duidelijk is waar en hoe het probleem te ondervangen met "normale" programma logica zoals je zelf aangeeft.
Exceptions voor "alles" gebruiken is zeker de bedoeling niet. Ik heb dat rwouwens duidelijk in de les aangegeven en staat ook duidelijk in Stroustrup.
Mvg,
Jan Broeckhove
Code: Select all
Beste Kevin,
Asserts mag je niet gebruiken als foutafhandeling naar de gebruiker toe. Je programma stopt dan meteen zonder dat de gebruiker de fout nog kan herstellen door bv een andere input te geven.
Je gebruikt exceptions wanneer de methode die je wil uitvoeren niet lukt. Bv stel je wil een plaats reserveren via de methode Plaats.Reserveer(nr,...). Als dit niet lukt omdat de plaats bv al gereserveerd is of niet bestaat, dan throw je een exception. Het reserveren van die plaats is immers niet gelukt.
Als je puur op input gaat controleren of de gebruiker wel een INTEGER of dergelijke heeft ingegeven, dan werk je niet met exceptions.
Exceptions gebruik je alleen bij foutmeldingen die in de onderliggende code niet kunnen afgehandeld worden. We gaan dus in de onderliggende klasses niet meer rechtstreeks printen. Het printen wordt alleen nog maar gedaan in je testmethode/klasse.
Gewone foute input kan je dus makkelijk met een if en cout doen, want je zit dan al in de juiste methode om iets af te drukken, namelijk je testmethode/klasse.
Kortom, alle andere methodes die je vanuit je testmethode/klasse aanroept, moeten exceptions throwen en mogen geen printstatements doen.
Fristi