Ç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 yan tümcesi, virgülle ayrılmış birden fazla değerden herhangi biriyle eşleşebilir. Özne bu değerlerden herhangi birine eşitse dal çalışır.
day = "Sat"
kind = case day
when "Sat", "Sun" then "weekend"
when "Mon", "Tue", "Wed", "Thu", "Fri" then "weekday"
end
puts kind # hafta sonuBu, bir if/elsif yapısında || bağlacını zincirlemekten çok daha temizdir.
when içinde değer türlerini de karıştırabilirsiniz: string'ler, aralıklar (range), regex kalıpları, bunların hepsi sadece === ifadesine 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 kolun ilk bakışta okunmasını kolaylaştıran biçimler hangileriyse onları seçin.
Görev
KolayTek bir karakter okuyun (tek satırlık girdi). Şunlardan birini yazdırmak için çoklu değerli when dallarına sahip bir case kullanın:
vowel: girdia, e, i, o, uharflerinden biridir (büyük/küçük harfe duyarsızdır, önce girdiyi küçük harfe dönüştürün)digit: girdi0..9arasındadır (bir aralık kullanın)punctuation: girdi.,,,!,?karakterlerinden biridirother: diğer her ş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; 7 için digit; ! için punctuation şeklindedir.
Kendin dene
ch = gets.chomp
# TODO: case ch.downcase ... çoklu değerli when dallarıyla
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
1Dizeler Detaylı İnceleme
Dize Metotlarına Genel BakışDize EnterpolasyonuDizeler Üzerinde YinelemeBölme ve BirleştirmeTekrar - Dize Dokuyucu4Bloklar, Proc'lar ve Lambda'lar
Blok Nedir?do..end ve Süslü Parantezleryield Anahtar SözcüğüBlok ParametreleriProc'lar ve Lambda'larÖzet - Özel Yineleyici7Hash'ler 2. Bölüm
Varsayılanlarla Hash.newHash'ler Üzerinde Yinelemeİç İçe Hash'lerBirleştirme ve DönüştürmeTekrar - Frekans Sayacı10Proje - Öğrenci Kayıtları
Projeye Genel BakışÖğrenci Ekle5Enumerable Gücü
Seçme ve ReddetmeMap ZincirlemeReduce / Injectcount, all?, any?, none?group_by ve partitionsort_by, min_by, max_byTekrar - Veri Hattı8Gelişmiş Karar Verme
Sınıflar ve Regex ile CaseÇok değerli whenÜçlü OperatörSatır içi if / unlessTekrar - Not SınıflandırıcıKendi başına pratik yap: Online Ruby derleyicisi