ArgumentError Nedir?
Elixir’de `ArgumentError` genellikle fonksiyonlar ve modüller için beklenmedik argümanlar verildiğinde karşımıza çıkar. Yani, bir fonksiyon doğru türde olmayan bir argüman aldığında, Elixir hemen bu hatayı fırlatır. Elixir’in güçlü tür kontrolü sayesinde, biz geliştiriciler doğru türde veriler sağladığımızdan emin olmak için dikkat etmeliyiz.
Neden Elixir ArgumentError Alırım?
`ArgumentError`'ı almak, birçok farklı sebepten olabilir. Peki, neden olabilir?
Bir fonksiyona yanlış türde bir argüman gönderdiğinizde bu hatayla karşılaşabilirsiniz. Elixir, argüman türlerini çok dikkatli bir şekilde kontrol eder ve beklenen türde bir değer almadığında hemen sizi uyarır.
2. Eksik veya Fazla Argüman Göndermek
Bir fonksiyonun belirli bir sayıda argüman beklediğini varsayalım. Eğer eksik veya fazla argüman gönderdiğinizde, Elixir yine aynı şekilde hata verir. Bu, her zaman fonksiyonun dokümantasyonunu okumanız gerektiğini gösteriyor.
3. Bozuk Veri Yapıları
Veri yapılarının (örneğin, listeler veya haritalar) yanlış yapılandırılması da "ArgumentError" ile sonuçlanabilir. Eğer fonksiyon, belirli bir yapıyı bekliyorsa ve siz başka bir yapı gönderdiyseniz, hata alırsınız.
ArgumentError’ı Örneklerle Anlamak
Daha iyi anlamanız için birkaç örnek üzerinden gidelim. Hazır olun, çünkü biraz eğlenceli olacak!
Bir sayıyı ikiyle bölen bir fonksiyon yazalım:
defmodule Matematik do
def bol(x, y) when is_number(x) and is_number(y) do
x / y
end
end
Ama, eğer biz bu fonksiyona bir sayı yerine bir liste gönderirsek:
Matematik.bol([1, 2, 3], 2)
Bu durumda Elixir bize şu hatayı verecektir:
` (ArgumentError) argument error`
Bu hata, Elixir’in bize yanlış türde veri verdiğimizi söylediği ve türlerin ne kadar önemli olduğunu vurgulayan tipik bir hata mesajıdır.
# Örnek 2: Eksik Argüman
Diyelim ki, aşağıdaki fonksiyon bir kullanıcı adı ve yaş gerektiriyor:
defmodule Kullanici do
def tanistir(ad, yas) do
IO.puts("Merhaba, benim adım #{ad} ve ben #{yas} yaşındayım.")
end
end
Ama biz sadece adı gönderdiğimizde:
Kullanici.tanistir("Ahmet")
Elixir, eksik argüman nedeniyle bu hatayı verecektir:
` (ArgumentError) argument error`
Burada, Elixir “hey, sen yaş göndermedin” diyecek ve fonksiyonun eksik argümanla çağrılmasına izin vermeyecektir.
ArgumentError’ı Nasıl Çözebilirim?
Şimdi sorun şu: Bu hatayı aldık, ne yapacağız? Endişelenmeyin, çözüm aslında oldukça basit. İşte birkaç ipucu:
Her zaman fonksiyonlarınıza doğru türde argümanlar gönderdiğinizden emin olun. Örneğin, bir sayı bekleyen bir fonksiyona bir liste gönderdiğinizde `ArgumentError` alırsınız.
2. Fonksiyon İmzalarını İncelemek
Bir fonksiyon çağırmadan önce, onun beklediği parametreleri kontrol edin. Eğer eksik ya da fazla parametre gönderiyorsanız, bu durumu düzelterek hatayı önlemiş olursunuz.
3. Pattern Matching Kullanmak
Elixir, fonksiyonlarınızı *pattern matching* ile yazmanıza olanak tanır. Yani, yanlış türde bir argüman geldiğinde farklı bir şekilde ele alabilirsiniz. Bu, hata almanızı önler.
defmodule Matematik do
def bol(x, y) when is_number(x) and is_number(y) do
x / y
end
def bol(_, _) do
IO.puts("Hatalı veri türü!")
end
end
Bu şekilde, yanlış türde bir argüman aldığınızda hata mesajı almak yerine, "Hatalı veri türü!" mesajı alırsınız.