Menu
Coddy logo textTech

Sınıflar ve Regex ile Case

Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 38 / 56.

case yapısını aralıklarla (ranges) kullandınız. Aynı ifade aynı zamanda sınıflar ve düzenli ifadelerle de eşleşir: her ikisi de when ifadesinin arka planda çağırdığı === operatörü aracılığıyla gerçekleşir.

Aldığınız değerin türüne göre dallanma yapmak için sınıfa göre eşleştirme yapın:

def describe(value)
  case value
  when Integer then "a whole number"
  when Float   then "a decimal"
  when String  then "some text"
  else              "something else"
  end
end

puts describe(42)      # a whole number
puts describe(3.14)    # a decimal
puts describe("hi")    # some text

Bir dizginin biçimine, bir telefon numarasına, bir e-postaya veya bir tarihe göre dallanmak için bir regex ile eşleştirme yapın:

def kind_of(text)
  case text
  when /^\d+$/        then "all digits"
  when /@/            then "looks like an email"
  when /^[A-Z]/       then "starts with a capital"
  else                     "other"
  end
end

Bu, if/elsif içindeki bir is_a? veya match? çağrıları zincirinden çok daha temizdir.

challenge icon

Görev

Kolay

Tek bir girdi satırı okuyun. Girdinin neye benzediğine bağlı olarak bu etiketlerden birini yazdırmak için bir case ifadesi kullanın:

  • Tamamı rakamlardan oluşuyorsa, number
  • @ içeriyorsa: email
  • Büyük harfle başlıyorsa, name
  • Diğer her şey için, unknown

Kuralları listelenen sırayla kontrol edin (böylece 123, unknown değil number olur; kevin@coddy.tech, email olur; Alice, name olur).

kevin@coddy.tech girdisi için çıktı email olur.

Kopya kağıdı

Ruby'nin case/when yapısı, arka planda === kullanarak sınıflar ve düzenli ifadeler ile eşleşme yapar.

Sınıfa göre eşleştirme:

case value
when Integer then "a whole number"
when Float   then "a decimal"
when String  then "some text"
else              "something else"
end

Regex'e göre eşleştirme:

case text
when /^\d+$/   then "all digits"
when /@/       then "looks like an email"
when /^[A-Z]/  then "starts with a capital"
else                "other"
end

Kendin dene

input = gets.chomp

# YAPILACAK: case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
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