Menu
CoddyTech

Case mit Klassen & Regex

Teil des Abschnitts Logik und Ablauf 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 Text

Mache 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
end

Das ist weit sauberer als eine Kette von is_a?- oder match?-Aufrufen in if/elsif.

challenge icon

Aufgabe

Einfach

Lies 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
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 und Ablauf

Übe selbstständig: Online-Ruby-Compiler