Depending on the language exceptions are used in many different ways. Some use it liberally for all kinds of error handling.
A good feature of Exceptions is you can throw them all the way up the stack and handle them there, giving you loose coupling between the code that calls the dangerous code and the one that catches it.
Exceptions have a big runtime overhead, so using them for normal control flow and error handling can be a bit meh.
Using return types can be great, if the language has good support for. For example swift enums are nice for this.
enum ResultError {
case noAnswer;
case couldNotAsk;
case timeOut
}
enum Result {
case answer: String;
caseerror: ResultError
}
funcask(){
let myResult = askQuestion(“Are return types useful?”);
switch myResult {
case answer:
print(answer);
caseerror:
handleError(error);
}
}
funchandleError(error: ResultError) {
switch ResultError {
case noAnswer:
print(“Received no answer”);
case couldNot:
…
}
}
Using enums and switch means the compiler ensures you handle all errors in a place you expect.
Depending on the language exceptions are used in many different ways. Some use it liberally for all kinds of error handling.
A good feature of Exceptions is you can throw them all the way up the stack and handle them there, giving you loose coupling between the code that calls the dangerous code and the one that catches it.
Exceptions have a big runtime overhead, so using them for normal control flow and error handling can be a bit meh.
Using return types can be great, if the language has good support for. For example swift enums are nice for this.
enum ResultError { case noAnswer; case couldNotAsk; case timeOut } enum Result { case answer: String; case error: ResultError } func ask(){ let myResult = askQuestion(“Are return types useful?”); switch myResult { case answer: print(answer); case error: handleError(error); } } func handleError(error: ResultError) { switch ResultError { case noAnswer: print(“Received no answer”); case couldNot: … } }Using enums and switch means the compiler ensures you handle all errors in a place you expect.