Zakresy w case / when
Część sekcji Logika i przepływ programu ścieżki Ruby w Coddy. Lekcja 8 z 56.
Zakresy świetnie sprawdzają się w instrukcji case języka Ruby. Podczas gdy w wielu językach trzeba użyć łańcucha if/elsif z operatorami porównania, Ruby pozwala bezpośrednio dopasować wartość do zakresów.
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 # CZa kulisami when 70..79 używa operatora === zakresu, który jest równoważny (70..79).include?(score).
Forma case jest krótsza, łatwiejsza do czytania i szybsza w pisaniu niż długa konstrukcja if/elsif.
Wyzwanie
ŁatwyWczytaj listę wieków będących liczbami całkowitymi, oddzielonych przecinkami. Dla każdego wieku przypisz go do kategorii za pomocą instrukcji case, używając przedziałów:
0..12:Child13..19:Teen20..64:Adult65lub więcej:Senior- Wszystkie pozostałe wartości (ujemne): pomiń, nie uwzględniaj ich w raporcie
Wypisz wiersz z liczbą dla każdej niezerowej kategorii, w tej ustalonej kolejności: Child, Teen, Adult, Senior. Pomijaj kategorie, w których nie ma żadnych osób. Po podaniu liczebności wypisz Skipped: <n>, gdzie n to liczba ujemnych (nieprawidłowych) wieków.
Dla danych wejściowych 5,15,30,70,-3,40,12 wynik to:
Child: 2
Teen: 1
Adult: 2
Senior: 1
Skipped: 1Spróbuj swoich sił
ages = gets.chomp.split(",").map(&:to_i)
# TODO: sklasyfikuj każdy wiek za pomocą case + zakresów, policz wartości w każdej kategorii, wypisz raport
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Łańcuchy znaków w szczegółach
Przegląd metod łańcuchów znakówInterpolacja łańcuchów znakówIterowanie po łańcuchach znakówDzielenie i łączeniePowtórka – Tkacz łańcuchów znaków4Bloki, procki i lambdy
Czym jest blok?do..end a nawiasy klamroweSłowo kluczowe yieldParametry blokuProcki i lambdyPodsumowanie — własny iterator7Hashe, część 2
Hash.new z wartościami domyślnymiIterowanie po haszachZagnieżdżone haszeŁączenie i przekształcaniePowtórka — licznik częstotliwości10Projekt – ewidencja uczniów
Przegląd projektuDodawanie ucznia5Potęga Enumerable
Select i RejectŁączenie wywołań mapReduce / Injectcount, all?, any?, none?group_by i partitionsort_by, min_by, max_byPodsumowanie — potok danych8Zaawansowane podejmowanie decyzji
case z klasami i wyrażeniami regularnymiwhen z wieloma wartościamiOperator trójargumentowyInline if / unlessPowtórka – klasyfikator ocenPoćwicz samodzielnie: Kompilator Ruby online