Bereiche in Case / When
Teil des Abschnitts Logik und Ablauf der Ruby-Journey von Coddy. Lektion 8 von 56.
Bereiche glänzen innerhalb von Rubys case-Anweisung. Während viele Sprachen eine Kette aus if/elsif mit Vergleichsoperatoren benötigen, kannst du in Ruby einen Wert direkt mit Bereichen abgleichen.
score = 78
grade = case score
when 90..100 then "A"
when 80..89 then "B"
when 70..79 then "C"
when 60..69 then "D"
else "F"
end
puts grade # CIm Hintergrund verwendet when 70..79 den ===-Operator des Bereichs, der (70..79).include?(score) entspricht.
Die case-Form ist kürzer, leichter zu lesen und schneller zu schreiben als eine lange if/elsif-Kaskade.
Aufgabe
EinfachLies eine durch Kommas getrennte Liste ganzzahliger Altersangaben ein. Ordne jedes Alter mithilfe einer case-Anweisung anhand von Bereichen ein:
0..12:Child13..19:Teen20..64:Adult65oder höher:Senior- Alles andere (negative Werte): überspringen, kommt nicht in den Bericht
Gib für jede Kategorie mit einem Wert ungleich null eine Zählzeile in dieser festen Reihenfolge aus: Child, Teen, Adult, Senior. Überspringe Kategorien mit null Personen. Gib nach den Zählungen Skipped: <n> aus, wobei n die Anzahl der negativen (ungültigen) Altersangaben ist.
Für die Eingabe 5,15,30,70,-3,40,12 lautet die Ausgabe:
Child: 2
Teen: 1
Adult: 2
Senior: 1
Skipped: 1Probier es selbst
ages = gets.chomp.split(",").map(&:to_i)
# TODO: klassifiziere jedes Alter mit case + ranges, zähle pro Kategorie, gib Bericht aus
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
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