Birbirinden farklı parameterleri (tipleri karsilastirirsak) ayni isimli birden fazla fonksiyonun tanimlanmasinda kullanabiliyormusuz. Buna fonksiyonlarin asiri yuklenmesi (function overloading) deniyor. D'den once C++ deneyimimde bu sekilde ogrenmistim. Aciklamak gerekirse;
Asiri yuklenmis fonksiyon cagiriminda derleyici, cagridaki arguman(lar)in sayisini, tipini ve sirasini incelemekte ve ona en uygun fonksiyonu secmekte. Fonksiyonun asiri yuklenmesi olayi genelde farkli veri tipleri uzerinde benzer islemler yapan, ayni fonksiyonlar olustururken kullanilmakta
Asagida bi ornek kod paylasiyorum int ve double'ın karesini hesaplamaya yarayan aşırı yüklenmiş kare fonksiyonudur bu.
import std.stdio;
int karesi(int x)
{
return x * x;
}
double karesi(double y)
{
return y * y;
}
void main()
{
writeln("7 Sayısının karesi: ", karesi(7));
writeln("7.5 sayısının karesi: ", karesi(7.5));
}
http://imgim.com/4409incir5321127.png
Asiri yuklenen fonksiyonlar, isaretleri ile ayirt ediliyorlar. İsaret, fonksiyonun adi ve parametre tiplerinin birlesimi olmakta. Derleyici, tip güvenli bağlamayı sağlamak için her fonksiyon tanıtıcısını parametrelerinin sayısı ve tipi ile çözümlüyor.
Benzer parametre listeleri ve farklı donus tiplerini kullanarak asiri yuklenmis fonksiyonlar olusturmak yazim hatasidir…
Derleyici, ayni isimli fonksiyonlar arasinda ayrim yaparken sadece parametre listelerini kullanmaktadır. Asiri yuklenmis fonksiyonlarin ayni sayida parametre icermesine gerek yoktur. Eğer varsayılan parametrelerle yükleme işleminde dikkatli olunmazsa karışıklık oluşabilir.
Kaynak: Deitel & Deitel C++
Kitabıydı ama benzer şekilde kullanımını D ile yapabiliyoruz diye yazayım dedim. D bu durumda farklı çözümler üretir mi acaba?
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]