Şablon nedir ? Ne işe yarar ? Nasıl kullanılır ? Tabiki örnekler...
Yani şablonu A'dan Z'ye açıklarsanız sevinirim.
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
|Thread overview
September 15, 2009Şablon ne işe yarar ?
Şablon nedir ? Ne işe yarar ? Nasıl kullanılır ? Tabiki örnekler...
--
September 15, 2009Şablon ne işe yarar ?
Şablon [template] da dallı budaklı bir konu olduğu için ben ayrıntılarını daha sonra D.ershane'de anlatmayı düşünüyorum.
Burada en yaygın ve kolay kullanımını göstereceğim. D'nin şablonlarının C++'nınkilerden 16.7 kat :p daha güçlü ve kullanışlı olduklarını aklımızda tutarak... :)
C ve türevi diller tür konusunda sağlamcıdırlar. Türler arasından otomatik dönüşümler de olur ama int'ler için yazılmış bir ikili arama algoritması double'lar için çalışmaz. Ya her tür için ayrı bir fonksiyon yazmak gerekir, ya da qsort'un kulladığı void* gibi tür güvenliğini çöpe atan ara durumlara düşmek gerekir.
Şablonlar, algoritmanın bir kere yazılmasını ve uyan türlerin hepsi için çalışmasını sağlarlar.
Basit olsun diye 'büyüğünün_karesi' diye bir fonksiyon kullanacağım (burada ?: işlecinin anlamı da anlaşılıyordur herhalde):
Sonuçta her tür için ayrı bir fonksiyon yazmış olduk... Ama dikkat edilirse, fonksiyonun içeriği her tür için aynıdır. Şablon olanağı, derleyiciye "türün ismini şimdi söylemiyorum, sonra programdaki kullanışına bakarak sen anla; ve sanki ben her tür için ayrı ayrı yazmışım gibi derle" demek gibidir.
Şimdi int ve double demeden bu işi halledeceğiz. Geleneksel olarak, ismini söylemeden bıraktığımız türe T denir:
Tek bir fonksiyon yazmak yeter! :) Orada iki fark var:
Şimdi o tek fonksiyonu kullanarak hem int hem double için çağırabiliriz, ve derleyici o fonksiyondan kendisi iki adet üretir:
O kodda türlerin int ve double olduklarını derleyici anlar. Bazı durumlarda gerektiğinde türün ne olduğu elle yazılmak zorunda kalınabilir:
Tek parametre alan şablonlarda D'nin bir kestirme olanağı da var:
Yani şablon, algoritmayı (veya fonksiyonu) tek kere yazdığımız ve derleyicinin gereken türler için kod ürettiği bir düzenektir.
Sınıf şablonları da vardır ama benzerliğini göstermek dışında ayrıntıya girmeyeceğim:
Tek bir sınıf yazdığımız halde int ve double için ayrı ayrı üretilir. Onun çıktısı şöyle:
Ali
--
September 16, 2009Şablon ne işe yarar ?
Posted in reply to Ali Çehreli (acehreli)
Evet bu şablon çok güzel bir şeymiş. Eminim daha pek çok özelliğide vardır. Nede olsa dili geliştirenler arasında şablon ustalarıda var.
Siz demiştiniz ki "Kuvvetli tür denetimi [strongly type-safe] sağlayan dillerde derleme zamanında tür uyumluluğu şarttır. " Ama bu o duruma uymuyor değil mi ? Yani bu kodda tür dinamik statik değil.
Yani artık bütün programlama dilleri dinamik olanaklar sağlıyor. Buna örnek 'auto ' da var sanırım.
İnşallah dersleri çabuk yazarsanız. Dilde gerçekten güzel olanaklar var gibi duruyor. Bunu benim gibi cahil bile anlıyor :-) Ama dil gerçekten çok haraketli ve sanırım hatalarıda çok var. Ama ne demişler nerede haraket orada bereket.
--
September 16, 2009Şablon ne işe yarar ?
Posted in reply to Ali Çehreli (acehreli)
alias ne demek ve şablonda hangi amaç için kullanılıyor.
Birde :
Burada is harelde şablonun türü double yada float mı girdi diye bakıyor. is başka nerelerde kullanılabilir. Mesela ben asas değişkenini int olarak mı tanımlandığını öğrenmek için
mi diyeceğim.
Birde if'in neden static tanımlandığını anlamadım.
--
September 16, 2009Şablon ne işe yarar ?
Yanlış anlam çıkmış... :) Tam tersine, şablonlar tür güvenliği konusunda hiçbir taviz vermezler. Bütün olay derleme zamanında kod üretilerek halledildiği için,
çağrıları iki farklı ve türleri sapasağlam fonksiyonlar çağırırlar.
auto'da endişe edecek bir şey yok: o da yalnızca programcının gereksizce yazacağı türlerin külfetini ortadan kaldırır. Yine derleme zamanında ve sanki programcı yazmış gibi, doğru tür yazılır.
Ali
--
September 16, 2009Şablon ne işe yarar ?
'static if''i birlikte tek bir anahtar sözcük gibi düşünebilirsin. Derlemeli dillerde 'static'in bir anlamı, "derleme zamanında" demektir.
'static if' de if gibidir ama derleme zamanında çalışır. C++'nın şablonlarıyla karşılaştırıldığında D'ye olağanüstü güç getiriyor.
Oradaki ifade, "eğer T double veya float ise" anlamına geliyor.
alias'ın da birden fazla anlamı var. Kendim öğrendikçe yazarım. :) Ama kelime anlamı olarak "takma isim" demek...
Ali
--