Bereiche in Case / When
Teil des Abschnitts Logik & Programmfluss 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 & 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