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 textBir 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
endBu, if/elsif içindeki bir is_a? veya match? çağrıları zincirinden çok daha temizdir.
Görev
KolayTek 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"
endRegex'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"
endKendin dene
input = gets.chomp
# YAPILACAK: case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
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ı