Zusammenfassung – 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
String-Methoden im ÜberblickString-InterpolationIterieren über StringsSplit und JoinRückblick – String Weaver4Blöcke, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas yield-SchlüsselwortBlock-ParameterProcs und LambdasZusammenfassung – Eigener Iterator7Hashes Teil 2
Hash.new mit StandardwertenIterieren über HashesVerschachtelte HashesZusammenführen und TransformierenRückblick – Häufigkeitszähler10Projekt - Studentenverwaltung
ProjektübersichtStudent hinzufügen5Enumerable-Kraftpaket
Select und RejectMap-VerkettungReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Data Pipeline8Fortgeschrittene Entscheidungslogik
Case mit Klassen & RegexMulti-Value whenTernärer OperatorInline if / unlessRückblick – Noten-Klassifizierer32D-Arrays
2D-Array GrundlagenZugriff auf 2D-ElementeIterieren über 2D-ArraysGängige 2D-MusterZusammenfassung – Matrix-Operationen6Projekt - Bibliotheksverwaltung
ProjektübersichtBuch hinzufügen9Fehlerbehandlung
Was ist eine Exception?begin / rescueMehrere rescue-Klauselnensure und raiseZusammenfassung – Sicherer Taschenrechner