Tracks
/
Ruby
Ruby
/
Übungen
/
Einfacher Taschenrechner
Einfacher Taschenrechner

Einfacher Taschenrechner

Lernübung

Einführung

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")

Anleitung

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"

1. Behandle den Code, der innerhalb der Methode calculate Fehler auslösen kann

Die 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:

  • Addition mit dem String +
  • Multiplikation mit dem String *
  • Division mit dem String /

2. Behandle unzulässige Operationen

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
Note

In dieser Übung wird von dir erwartet, dass du die Ausnahme UnsupportedOperation für einen bestimmten Gültigkeitsbereich definierst.

3. Behandle ungültige Argumente

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

4. Behandle DivideByZero-Ausnahmen

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."
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Ruby Exercism

Bereit, mit Einfacher Taschenrechner zu starten?

Melde dich bei Exercism an, um Ruby mit 21 Konzepte121 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.