Rückblick – Sicherer Taschenrechner
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy. Lektion 47 von 56.
Erstellen Sie einen kleinen Taschenrechner, der fehlerhafte Eingaben übersteht und dabei raise, mehrere rescue-Klauseln sowie ensure kombiniert.
Aufgabe
MittelDefinieren Sie eine Methode calc(a, op, b), die:
- Einen
ArgumentErrormit der Nachricht"unknown operator"auslöst, wennopnicht einer der Operatoren+,-,*,/ist - Andernfalls die Operation ausführt (verwenden Sie Ganzzahlarithmetik für
/)
Lesen Sie dann drei Zeilen von der Eingabe ein, a, op, b: und rufen Sie calc innerhalb von begin / rescue / ensure auf:
- Bei Erfolg geben Sie
<a> <op> <b> = <result>aus - Bei einem
ArgumentErrorgeben SieBad operatoraus - Bei einem
ZeroDivisionErrorgeben SieCannot divide by zeroaus - In
ensuregeben Sie immer--- end ---aus
Verwenden Sie Integer(...) zum Parsen von a und b innerhalb desselben begin-Blocks, sodass nicht-ganzzahlige Eingaben ebenfalls bei Bad operator landen (ArgumentError deckt beides ab).
Für die Eingabe 6 / * / 7 lautet die Ausgabe:
6 * 7 = 42
--- end ---Für die Eingabe 10 / / / 0:
Cannot divide by zero
--- end ---Probier es selbst
# TODO: definiere calc(a, op, b), wirft ArgumentError bei unbekanntem op
raw_a = gets.chomp
op = gets.chomp
raw_b = gets.chomp
# TODO: begin/rescue/ensure wie beschrieben
Alle Lektionen in Logik & Programmfluss
1Strings im Detail
Überblick über String-MethodenString-InterpolationStrings durchlaufenSplitten und VerbindenRückblick – String Weaver4Blocks, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas Schlüsselwort yieldBlock-ParameterProcs und LambdasRückblick – Benutzerdefinierter Iterator2Bereiche
Was ist ein Bereich?BereichsmethodenBereiche in Case / WhenWiederholung – Übung zu Bereichen5Das Enumerable-Kraftpaket
Select und RejectMap verkettenReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Datenpipeline8Fortgeschrittene Entscheidungsfindung
Case mit Klassen & Regexwhen mit mehreren WertenTernärer OperatorInline-if / unlessRückblick – Notenklassifizierer32D-Arrays
Grundlagen von 2D-ArraysZugriff auf 2D-ElementeDurchlaufen von 2D-ArraysGängige 2D-MusterRückblick – Matrixoperationen6Projekt – Bibliotheksverwaltung
ProjektübersichtBuch hinzufügen9Fehlerbehandlung
Was ist eine Exception?begin / rescueMehrere rescue-Klauselnensure und raiseRückblick – Sicherer TaschenrechnerÜbe selbstständig: Online-Ruby-Compiler