İstisna Nedir?
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 43 / 56.
Çalışma zamanında bir şeyler ters gittiğinde; sıfıra bölme, "abc" ifadesini bir tam sayı olarak ayrıştırma veya nil üzerinde bir metot çağırma gibi durumlarda Ruby bir istisna fırlatır. Program durur ve Ruby nerede ne olduğunu yazdırır.
10 / 0
# ZeroDivisionError: 0 ile bölmeHer hata türü kendi sınıfıdır. Yaygın olanlardan birkaçı:
ZeroDivisionError: bir tam sayıyı sıfıra bölmekArgumentError: bir metoda yanlış argümanlar iletildi (Integer("abc"))
NoMethodError: alıcının sahip olmadığı bir metodu çağırmak (nil.upcase)TypeError: yanlış türdeki bir nesne üzerinde işlem yapmak ("a" + 1)
Her istisna sınıfının bir .message özelliği vardır: bu, istisna işlenmediğinde Ruby'nin yazdırdığı, insan tarafından okunabilir açıklamadır. Sonraki dersler, programınızın çalışmaya devam etmesi için bu istisnaların nasıl yakalanacağını göstermektedir.
Görev
BaşlangıçTek bir girdi satırı, yani tek bir Ruby ifadesi adı okuyun. Ruby'nin bunun için fırlatacağı istisna sınıfının adını yazdırın. Bir case ifadesi kullanın (gerçekten hata fırlatmanıza gerek yoktur):
divide-by-zero→ZeroDivisionErrornil-method→NoMethodErrorbad-integer→ArgumentErrorwrong-type→TypeError- başka herhangi bir şey →
Unknown
nil-method girdisi için çıktı NoMethodError olur.
Kopya kağıdı
Çalışma zamanında bir şeyler ters gittiğinde, Ruby bir istisna fırlatır (raises an exception) ve program durur. Yaygın istisna sınıfları:
ZeroDivisionError: bir tam sayıyı sıfıra bölmekArgumentError: yanlış argümanlar (örneğinInteger("abc"))NoMethodError: alıcının sahip olmadığı bir metodu çağırmak (örneğinnil.upcase)TypeError: yanlış türdeki nesne üzerinde işlem yapmak (örneğin"a" + 1)
10 / 0
# ZeroDivisionError: 0 ile bölündüHer istisna nesnesi, insan tarafından okunabilir bir açıklama içeren bir .message metoduna sahiptir.
Kendin dene
kind = gets.chomp
# TODO: case kind ... eşleşen istisna sınıfı adını yazdırın
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ı32D Diziler
2D Dizi Temelleri2D Elemanlara Erişim2D Diziler Üzerinde YinelemeYaygın 2D KalıplarÖzet - Matris İşlemleri6Proje - Kütüphane Yöneticisi
Projeye Genel BakışKitap Ekle9Hata Yönetimi
İstisna Nedir?begin / rescueBirden Fazla rescue İfadesiensure ve raiseÖzet - Güvenli Hesap Makinesi