August 25, 2014

Şablon katmalarını hatırlamak için:

http://ddili.org/ders/d/katmalar.html

Onlarla ilgili yeni bir şey öğrendim: Şablon katmalarının koda katıldıkları noktada değerlendirildiklerini biliyordum. Ancak, bir şablon katmasının ihtiyaç duyduğu bütün import bildirimlerinin o şablonun kendi içinde bulunması gerektiğini bilmiyordum.

Bu konu şurada geçti:

http://forum.dlang.org/thread/olvhztchmyxbedqmfanm@forum.dlang.org

Örneğin, aşağıdaki şablon katması üç modülden yararlanıyor. Ancak, bu modüller programın başında eklendiklerinden, aslında şablonun eksik olduğu kabul edilir. Tabii, bu eksiklik tek dosyadan oluşan aşağıdaki programda farkedilmiyor:

import std.stdio;
// NOT: Aşağıdakiler aslında yanlış noktada eklenmişler!
import std.range;
import std.algorithm;
import std.conv;

// Not: Kitapta burada 'mixin' anahtar sözcüğü de bulunmuyor.
mixin template mesajVerİşlevi(size_t adet)
{
   string mesajVer(string mesaj)
   {
       return
           adet
           .iota
           .map!(_ => mesaj)
           .joiner(", ")
           .to!string;
   }
}

struct S
{
   // S bu sayede mesajVer() adında bir işlev edinir
   mixin mesajVerİşlevi!3;
}

void main()
{
   auto s = S();

   writeln(s.mesajVer("merhaba"));
}

Çıktısı:

'merhaba, merhaba, merhaba'

Eğer o şablon başka bir modülde olsaydı ve o modülden yararlanan başka modüller std.range, std.algorithm, ve std.conv modüllerini kendileri eklememiş olsalardı derleme hatası alınırdı. O yüzden, şablonun yararlandığı modüllerle ilgili import'lar kendi içine (de) taşınmalı:

mixin template mesajVerİşlevi(size_t adet)
{
   string mesajVer(string mesaj)
   {
       // Şimdi doğru yerdeler.
       import std.range;
       import std.algorithm;
       import std.conv;

       return
           adet
           .iota
           .map!(_ => mesaj)
           .joiner(", ")
           .to!string;
   }
}

Not aldım; bu konuyu o bölüme ekleyeceğim.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 01, 2014

Teşekkürler, çok faydalı bir alışkanlık!

Hani bazen bu kod niye derlenmez veya garip çalışırız deriz; ya başka bir kütüphanede yolunu bulunmuştur ya da aradığını bulamamıştır ama bilmeyiz :)

İşte bu tür şeylere dikkat etmek önemliydi, paylaşım için tekrar teşekkürler...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]