Case mit Klassen & Regex
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy. Lektion 38 von 56.
Sie haben case mit Bereichen verwendet. Dieselbe Anweisung prüft auch auf Klassen und reguläre Ausdrücke: beides über den ===-Operator, den when unter der Haube aufruft.
Vergleichen Sie nach Klasse, um je nach Art des erhaltenen Werts zu verzweigen:
def describe(value)
case value
when Integer then "a whole number"
when Float then "a decimal"
when String then "some text"
else "something else"
end
end
puts describe(42) # eine ganze Zahl
puts describe(3.14) # eine Dezimalzahl
puts describe("hi") # etwas TextMache ein Pattern Matching mit einem regulären Ausdruck, um je nach Form eines Strings zu verzweigen, z. B. eine Telefonnummer, eine E-Mail oder ein Datum:
def kind_of(text)
case text
when /^\d+$/ then "all digits"
when /@/ then "looks like an email"
when /^[A-Z]/ then "starts with a capital"
else "other"
end
endDas ist weit sauberer als eine Kette von is_a?- oder match?-Aufrufen in if/elsif.
Aufgabe
EinfachLies eine einzelne Eingabezeile ein. Verwende eine case-Anweisung, um abhängig davon, wie die Eingabe aussieht, eines dieser Labels auszugeben:
- Nur Ziffern,
number - Enthält
@:email - Beginnt mit einem Großbuchstaben,
name - Alles andere,
unknown
Prüfe die Regeln in der angegebenen Reihenfolge (also ist 123 number, nicht unknown; kevin@coddy.tech ist email; Alice ist name).
Für die Eingabe kevin@coddy.tech lautet die Ausgabe email.
Probier es selbst
input = gets.chomp
# TODO: case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
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 – NotenklassifiziererÜbe selbstständig: Online-Ruby-Compiler