Ausnahmen in Ruby bieten, wie in vielen Sprachen, eine Möglichkeit, mit unerwarteten Ereignissen umzugehen. Ein guter Umgang mit Ausnahmen ist wichtig, wenn du verhindern willst, dass dein Programm abstürzt.
Wenn eine Ausnahme ausgelöst wird, egal ob du sie explizit auslöst oder ob der Ruby-Interpreter sie auslöst, unterbricht das Programm seinen normalen Ablauf und beendet sich schließlich mit einer Fehlermeldung:
raise ArgumentError.new("Something went wrong!")
=> Traceback (most recent call last):
.
.
ArgumentError (Something went wrong!)
1/0
=> Traceback (most recent call last):
.
.
ZeroDivisionError (divided by 0)
Wenn wir diesen Abbruch verhindern wollen, müssen wir auf die Ausnahme reagieren. Das nennt man eine Ausnahme „abfangen“:
begin
# ...any code that raises an exception
rescue
puts 'Got an exception'
end
Dieses Programm stürzt nicht ab und gibt „Got an exception“ aus. Statt sich zu beenden, führt Ruby den Code im rescue-Block aus, der eine Nachricht ausgibt.
Wie alles in Ruby sind auch Ausnahmen Objekte, und sie enthalten meist Daten über die Ausnahme. So bekommen wir das Ausnahmeobjekt:
begin
# ...any code that raises an exception
rescue => e
puts "Exception class: #{ e.class.name }"
puts "Exception Message:#{e.message}"
end
In Ruby kannst du auch eigene Ausnahmen auslösen. Zum Beispiel:
begin
raise ArgumentError.new("Invalid argument")
rescue ArgumentError => e
puts e.message
end
Bei der vorigen Ausnahme handelt es sich um eine von Rubys eingebauten Ausnahmen, aber du kannst auch eigene Ausnahmen definieren und auslösen:
class CustomError < StandardError
end
raise CustomError.new("Something went wrong")
In dieser Übung baust du die Fehlerbehandlung für einen einfachen Taschenrechner.
Das Ziel ist ein funktionierender Taschenrechner, der einen String nach folgendem Muster zurückgibt: 16 + 51 = 67, wenn er die Argumente 16, 51 und + erhält.
SimpleCalculator.calculate(16, 51, "+")
# => "16 + 51 = 67"
SimpleCalculator.calculate(32, 6, "*")
# => "32 * 6 = 192"
SimpleCalculator.calculate(512, 4, "/")
# => "512 / 4 = 128"
calculate Fehler auslösen kannDie Hauptmethode, die du in dieser Aufgabe implementierst, ist die Klassenmethode SimpleCalculator.calculate().
Sie nimmt drei Argumente entgegen.
Die ersten beiden Argumente sind Zahlen, mit denen eine Operation durchgeführt wird.
Das dritte Argument ist vom Typ String, und für diese Übung ist es notwendig, die folgenden Operationen zu implementieren:
+
*
/
Passe die Methode SimpleCalculator.calculate() so an, dass sie für unbekannte Operationssymbole eine Ausnahme vom Typ UnsupportedOperation auslöst.
SimpleCalculator.calculate(1, 2, '-')
# => Raises an UnsupportedOperation
In dieser Übung wird von dir erwartet, dass du die Ausnahme UnsupportedOperation für einen bestimmten Gültigkeitsbereich definierst.
Passe die Methode SimpleCalculator.calculate() so an, dass sie bei ungültigen Argumenttypen eine Ausnahme vom Typ ArgumentError auslöst.
SimpleCalculator.calculate(1, '2', '*')
# => Raises an ArgumentError
Passe SimpleCalculator.calculate() so an, dass Ausnahmen vom Typ ZeroDivisionError behandelt werden.
Der Code zur Behandlung sollte den String mit dem Inhalt Division by zero is not allowed. zurückgeben.
Alle anderen Ausnahmen sollten von der Methode SimpleCalculator.calculate() nicht behandelt werden.
SimpleCalculator.calculate(512, 0, "/")
# => returns "Division by zero is not allowed."
Melde dich bei Exercism an, um Ruby mit 21 Konzepte121 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.