Menu
Coddy logo textTech

Ç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   # weekend

Bu, 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
end

Her bir dalın bir bakışta okunmasını kolaylaştıran biçimleri seçin.

challenge icon

Görev

Kolay

Tek 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: girdi 0..9 arası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"
end

Aynı 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"
end

Kendin dene

ch = gets.chomp

# TODO: çoklu değerli when dalları ile case ch.downcase ...
quiz iconKendini test et

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