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 kullandınız. Aynı ifade sınıflar ve düzenli ifadeler ile de eşleşir: her ikisini de when yapısının arka planda çağırdığı === operatörü aracılığıyla gerçekleştirir.
Aldığınız değerin türüne göre dallanmak 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) # bir tam sayı
puts describe(3.14) # bir ondalık
puts describe("hi") # bir metinBir dizenin şekline, bir telefon numarasına, bir e-postaya veya bir tarihe göre dallanmak için bir regex ile eşleştirin:
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ısı 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:
- Tümü rakamlardan oluşuyorsa,
number @içeriyorsa:email- Büyük harfle başlıyorsa,
name - Diğer her durum için,
unknown
Kuralları listelenen sırada kontrol edin (böylece 123 ifadesi unknown değil, number olur; kevin@coddy.tech ifadesi email olur; Alice ifadesi name olur).
kevin@coddy.tech girdisi için çıktı email şeklindedir.
Kendin dene
input = gets.chomp
# TODO: 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
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