Menu
Coddy logo textTech

ensure und raise

Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy. Lektion 46 von 56.

Zwei weitere Bausteine vervollständigen das Toolkit zur Fehlerbehandlung.

ensure ist ein Block, der auf jeden Fall ausgeführt wird – unabhängig davon, ob begin normal beendet wurde, ein rescue-Zweig eine Ausnahme abgefangen hat oder die Ausnahme sogar nicht abgefangen wurde. Hier platzierst du Bereinigungscode:

begin
  puts "opening file"
  raise "something broke"
rescue
  puts "caught it"
ensure
  puts "closing file"
end
# Datei öffnen
# abgefangen
# Datei schließen

raise dient dazu, deine eigene Ausnahme zu erstellen. Übergebe eine Zeichenfolge für die Nachricht oder eine Klasse zusammen mit einer Nachricht:

def withdraw(amount)
  raise ArgumentError, "amount must be positive" if amount <= 0
  # ... führe die Auszahlung durch
end

Die Konvention besteht darin, frühzeitig, am Anfang einer Methode, raise zu verwenden, um bei falschen Argumenten schnell fehlzuschlagen. Der Aufrufer kann rescue verwenden, wenn eine sinnvolle Wiederherstellung möglich ist, oder den Fehler weiter nach oben propagieren lassen.

challenge icon

Aufgabe

Einfach

Definiere eine Methode safe_divide(a, b), die:

  • ArgumentError mit der Meldung "b cannot be zero" auslöst, wenn b == 0
  • Andernfalls a / b zurückgibt

Lies anschließend zwei Ganzzahlen aus der Eingabe. Rufe safe_divide innerhalb von begin / rescue / ensure auf:

  • Bei Erfolg gib Result: <value> aus
  • Bei ArgumentError gib Error: <message> aus
  • Gib in ensure immer Done. aus

Für die Eingabe 10 / 2 lautet die Ausgabe:

Result: 5
Done.

Für die Eingabe 10 / 0:

Error: b cannot be zero
Done.

Probier es selbst

# TODO: definiere safe_divide(a, b), wirft ArgumentError wenn b == 0

a = gets.to_i
b = gets.to_i

# TODO: begin ... print Result; rescue ArgumentError => e ... print Error; ensure ... print Done.
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Programmfluss

Übe selbstständig: Online-Ruby-Compiler