Çok Değerli when
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 39 / 56.
Tek bir when ifadesi, virgülle ayrılmış birkaç değerden herhangi biriyle eşleşebilir. Eğer özne bunlardan herhangi birine eşitse ilgili dal çalışır.
day = "Sat"
kind = case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
end
puts kind # weekendBu, bir if/elsif içinde || zincirlemekten çok daha temizdir.
Bir when içinde değer türlerini de karıştırabilirsiniz: dizeler, aralıklar, regex desenleri; bunların hepsi sadece === operatörüne yanıt veren şeylerdir:
def describe(x)
case x
when 0, nil then "empty"
when 1..9 then "small"
when 10..99 then "medium"
when /^huge:/i then "flagged huge"
end
endHer bir dalın bir bakışta okunmasını kolaylaştıran biçimleri seçin.
Görev
KolayTek bir karakter okuyun (bir satırlık girdi). Şunlardan birini yazdırmak için çoklu değerli when dallarına sahip bir case kullanın:
vowel: girdi şunlardan biridir:a, e, i, o, u(büyük/küçük harf duyarsız, önce girdiyi küçük harfe dönüştürün)digit: girdi0..9arasındadır (bir aralık kullanın)punctuation: girdi şunlardan biridir:.,,,!,?other: başka herhangi bir şey
Girdiyi tek karakterlik bir dize olarak ele alın. Rakam dalını "0".."9" gibi bir aralık kullanarak test edin.
E girdisi için çıktı vowel olur; 7 için digit; ! için punctuation.
Kopya kağıdı
Bir when ifadesi, virgülle ayrılmış birden fazla değerle eşleşebilir:
case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
endAynı case yapısında dizeleri, aralıkları ve regex desenlerini bir arada kullanabilirsiniz:
case x
when 0, nil then "empty"
when 1..9 then "small"
when /^huge:/i then "flagged huge"
endKendin dene
ch = gets.chomp
# TODO: çoklu değerli when dalları ile case ch.downcase ...
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Derinlemesine Stringler
String Metotlarına Genel BakışString InterpolationStringler Üzerinde GezinmeSplit ve JoinÖzet - String Weaver4Bloklar, Procs ve Lambdalar
Blok Nedir?do..end ve Süslü Parantezleryield Anahtar KelimesiBlok ParametreleriProcs ve LambdalarÖzet - Özel İteratör7Hashes Bölüm 2
Varsayılan Değerlerle Hash.newHash Yapıları Üzerinde Yinelemeİç İçe Hash YapılarıBirleştirme ve DönüştürmeÖzet - Frekans Sayacı10Proje - Öğrenci Kayıtları
Projeye Genel BakışÖğrenci Ekle5Enumerable Gücü
Select ve RejectMap ZincirlemeReduce / Injectcount, all?, any?, none?group_by ve partitionsort_by, min_by, max_byÖzet - Data Pipeline8İleri Seviye Karar Yapıları
Sınıflar ve Regex ile CaseÇok Değerli whenTernary OperatörüSatır İçi if / unlessÖzet - Not Sınıflandırıcı