Menu
Coddy logo textTech

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 gegen Klassen und reguläre Ausdrücke: beides über den ===-Operator, den when unter der Haube aufruft.

Verwenden Sie den Abgleich nach Klassen, um je nach Art des erhaltenen Wertes 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)      # a whole number
puts describe(3.14)    # a decimal
puts describe("hi")    # some text

Vergleiche mit einem regulären Ausdruck, um basierend auf der Form eines Strings, einer Telefonnummer, einer E-Mail oder eines Datums zu verzweigen:

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

Dies ist weitaus sauberer als eine Kette von is_a? oder match? Aufrufen in if/elsif.

challenge icon

Aufgabe

Einfach

Lies eine einzelne Zeile der Eingabe. Verwende eine case-Anweisung, um eines dieser Labels auszugeben, basierend darauf, wie die Eingabe aussieht:

  • Nur Ziffern, number
  • Enthält @: email
  • Beginnt mit einem Großbuchstaben, name
  • Alles andere, unknown

Überprüfe die Regeln in der aufgeführten Reihenfolge (so ist 123 number, nicht unknown; kevin@coddy.tech ist email; Alice ist name).

Für die Eingabe kevin@coddy.tech ist die Ausgabe email.

Spickzettel

Rubys case/when prüft gegen Klassen und reguläre Ausdrücke, wobei intern === verwendet wird.

Abgleich nach Klasse:

case value
when Integer then "a whole number"
when Float   then "a decimal"
when String  then "some text"
else              "something else"
end

Abgleich nach Regex:

case text
when /^\d+$/   then "all digits"
when /@/       then "looks like an email"
when /^[A-Z]/  then "starts with a capital"
else                "other"
end

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 & Programmfluss