R.Reddington

WFN Üye
Konular
627
Mesajlar
627
Çözüm
0
Ticaret Puanı
0
Üyelik
25 Gün
Konum
Kastamonu
Web Sitesi
Var
Alanı
Sosyal Backlink
1/1
Konu sahibi
Ruby’de sık yapılan hataları önlemek için önce verinin türünü ve olası boş değerlerini belirleyin, ardından koşulların ve koleksiyon işlemlerinin beklediğiniz sonucu üretip üretmediğini küçük testlerle doğrulayın. Özellikle nil ile false ayrımına, tamsayı bölmesine ve hata yakalarken asıl sorunu gizlememeye dikkat edin.

Koşullarda değerleri doğru yorumlayın​


Ruby’de koşul içinde yalnızca nil ve false yanlış kabul edilir. Örneğin 0, boş metin ve boş dizi doğru kabul edilir. Bu nedenle if ad koşulu, adın boş bir metin olmadığını kanıtlamaz. Boş metni de reddetmeniz gerekiyorsa bunu ayrıca sınayın; yalnızca boşluk içeren metnin de geçersiz sayılmasını istiyorsanız önce strip ile kenar boşluklarını temizleyin.

Benzer biçimde deger || varsayilan ifadesi, değer nil veya false olduğunda varsayılanı kullanır. false geçerli bir ayarsa, onu korumak için yalnızca nil durumunu ayrı kontrol edin.

&. güvenli çağrı operatörü, alıcı nil olduğunda metodu çağırmadan nil döndürür. Ancak yanlış türde bir nesnenin ilgili metoda sahip olmaması gibi diğer hataları çözmez. Ayrıca zorunlu bir değerin eksikliğini sessizce saklamak yerine, gerektiğinde eksikliği açıkça bildirmek daha uygundur.

Dönüşümleri ve koleksiyon sonuçlarını sınayın​


İki tamsayının bölünmesi her zaman ondalıklı bir sonuç üretmez: 5 / 2 sonucu 2 olur. Ondalıklı sonuç gerekiyorsa işleme uygun biçimde en az bir değeri dönüştürün; örneğin 5.to_f / 2 sonucu 2.5 verir. Para hesaplarında ise kayan noktalı sayıların hassasiyet sınırlarını dikkate alın; gereksinime göre kuruş gibi en küçük birimi tamsayıyla tutmayı veya uygun bir ondalık gösterimi kullanmayı değerlendirin.

Bir diziyi dönüştürürken each ile map arasındaki farkı gözetin. each elemanlar üzerinde işlem yapar ve özgün diziyi döndürür; map ise bloktan dönen değerlerle yeni bir dizi oluşturur. Yeni değerleri saklamak istiyorsanız map sonucunu bir değişkene atayın. Her iki durumda da blok içinde ayrıca değişiklik yapan bir işlem kullanıp kullanmadığınızı kontrol edin.

Aşağıdaki varsayımsal örnek, kullanıcıdan gelen puan metnini doğrular ve geçerli puanların ortalamasını hesaplar. puanlar.rb adlı dosyaya kaydedin:

Ruby:
def ortalama(girdiler)
  puanlar = girdiler.map do |girdi|
    Integer(girdi, 10)
  rescue ArgumentError, TypeError
    raise ArgumentError, "Geçersiz puan: #{girdi.inspect}"
  end

  return nil if puanlar.empty?

  puanlar.sum.to_f / puanlar.length
end

p ortalama(["5", "2"])
p ortalama([])

Terminalde dosyanın bulunduğu dizinde ruby puanlar.rb çalıştırıldığında sırasıyla 3.5 ve nil görülmesi beklenir. İlk sonuç ondalıklı ortalamadır; ikincisi, boş listede hesaplanacak ortalama olmadığını gösterir. "iki" gibi geçersiz bir metin verilirse yöntem hata üretir. Bu örnek puanların yalnızca tamsayı olduğunu varsayar; izin verilen puan aralığını ayrıca doğrulamaz.

Hataları gizlemeyin, sınırları test edin​


rescue kullanırken yalnızca işlem için beklenen hataları ve onları nasıl ele alacağınızı belirleyin. Her hatayı yakalayıp sessizce nil döndürmek, geçersiz girdiyi ve programlama hatalarını aynı sonuç gibi gösterebilir. Yukarıdaki örnek dönüşüm hatasını açıklayıcı bir hataya çevirir; çağıran kod bu hatayı kullanıcıya uygun biçimde gösterebilir. Hatanın ayrıntılarını kaydederken parola, erişim belirteci veya kişisel veri içeren girdileri kayda yazmayın.

Değişiklik yaptıktan sonra normal girdinin yanında boş listeyi, nil değerini, geçersiz metni ve iş kuralları açısından sınır değerlerini de deneyin. Bir testin geçmesi yalnızca sınanan durumun beklenen sonucu verdiğini gösterir; tüm girdilerin doğru işlendiğini kanıtlamaz. Beklenmeyen sonuçta önce girdinin türünü ve ilgili metodun döndürdüğü değeri kontrol edin; tanılama için eklediğiniz geçici çıktıları işiniz bitince kaldırın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic