"ArgumentError" Hatası Nedir?
Örneğin, bir metoda bir dizi beklerken bir sayı verirseniz, Ruby size "ArgumentError" hatası verecektir. Peki, nasıl bu hatayı önleyebiliriz?
ArgumentError Hatasının Yaygın Nedenleri
Örneğin:
```ruby
def topla(a, b)
a + b
end
topla(3) # ArgumentError: wrong number of arguments (given 1, expected 2)
```
2. Yanlış Veri Türü: Bir metod, belirli bir türde argüman bekler. Eğer yanlış veri türünde bir argüman verirseniz, bu da bir "ArgumentError" hatasına yol açar.
Örneğin:
```ruby
def merhaba(isim)
puts "Merhaba, #{isim}!"
end
merhaba(123) # ArgumentError: wrong argument type Integer (expected String)
```
3. Yanlış Varsayılan Değerler: Metodunuzda varsayılan bir değer belirlediğinizde, bu değerin beklenmeyen bir türde olması da bir "ArgumentError" hatasına yol açabilir.
Örneğin:
```ruby
def selamla(isim = "Dünya")
puts "Selam, #{isim}!"
end
selamla(nil) # ArgumentError: wrong argument type NilClass (expected String)
```
ArgumentError Nasıl Çözülür?
1. Argümanları Kontrol Edin: Hatanın kaynağı genellikle yanlış sayıda veya yanlış türdeki argümanlardır. Metodunuzun beklediği argüman sayısını ve türünü kontrol edin.
2. İyi Hata Mesajları Yazın: Metodlarınıza uygun hata mesajları eklemek, hatayı anlamanızı kolaylaştırabilir. Böylece, yanlış argüman verildiğinde kullanıcıya açık bir mesaj göstererek sorunu daha hızlı çözebilirsiniz.
Örneğin:
```ruby
def topla(a, b)
raise ArgumentError, "İki sayı girilmelidir" unless a.is_a?(Numeric) && b.is_a?(Numeric)
a + b
end
```
3. Varsayılan Değer Kullanımını Gözden Geçirin: Eğer metodunuzda varsayılan bir değer kullanıyorsanız, bu değerin doğru türde olduğundan emin olun. Ayrıca, gerekli olan argümanları kontrol etmek için uygun kontroller ekleyin.
4. Test Edin: Yazdığınız metodun her bir argümanını test edin. Hata almamak için doğru türde ve sayıda argüman sağladığınızdan emin olun.
Bir Örnekle Düşünelim
```ruby
def birleştir(ad, soyad)
"#{ad} #{soyad}"
end
puts birleştir("John", "Doe") # John Doe
puts birleştir("John") # ArgumentError: wrong number of arguments (given 1, expected 2)
```
Burada, `birleştir` metodunun iki argüman beklediğini unutmamalısınız. Eğer yalnızca bir argüman gönderirseniz, Ruby "ArgumentError" hatası verecektir. Bu hatayı önlemek için, doğru sayıda argüman gönderdiğinizden emin olun.