August 08, 2012

Merhaba,

Bugün D'nin BugZilla'sı üzerinde geziniyorken çok ilginç bir örneğe rastladım:
http://d.puremagic.com/issues/show_bug.cgi?id=7609

Sanki iç içe yapı kuracağına iki yapıyı birbirine bağlamış ama bir de alias kullanmış. En iyisimi kodlar üzerinden konuşayım ve aşağıya anlamak için denediğim örneği paylaşayım:

import std.stdio;

struct DIŞ {
   İÇ içteki;
   alias içteki this;
}
struct İÇ {
   int i;
}
struct AYNISI {
 struct İÇ {
     int i;
 } İÇ iç;

 this(int içteki) {
   iç.i = içteki;
 }
}
void main() {
   auto aynısı = AYNISI(1);
        aynısı.iç.writeln("<--İç içe yapılardan içteki(aynısı)");

   auto deneme = DIŞ(İÇ(1));
        deneme.içteki.writeln("<--Ayrı ayrı yapılardan içteki(deneme)");

   writeln();

   aynısı.iç.i.writeln("<--İç içe yapıdan aktarılan değer(iç.i)");
   deneme.i.writeln("<--Ayrı ayrı yapıdan aktarılan değer(İÇ.i)");

   //with (deneme) writeln(i);  // fail
}

Hatanın nedeni herhalde with kümesi çinde alias kapsam dışında kalması. Sanki doğal bir sonuç ve belki de (bence öyle) hata değil ne dersiniz? Neyse, doğru veya yanlış ama böyle bir alias kullanımı çok hoş görünüyor. Gerçi Ali hocamın buradaki dersi (http://www.ddili.org/ders/d/alias.html)nde bahsetmiş ve en sona önemli bir not düşmüş:

Alıntı:

>

Bir yapı veya sınıf tanımında birden fazla alias this bulunamaz.

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

August 08, 2012

Alıntı (Salih Dinçer):

>
>     deneme.i.writeln("<--Ayrı ayrı yapıdan aktarılan değer(İÇ.i)");
>
>     //with (deneme) writeln(i);  // fail
> }
> ```

> Hatanın nedeni herhalde with kümesi çinde alias kapsam dışında kalması. Sanki doğal bir sonuç ve belki de (bence öyle) hata değil ne dersiniz?

Öte yandan şöyle de düşünülebilir: Eğer with'in anlamı "'i' gördüğün zaman bir de 'deneme.i' diye dene" ise ve 'deneme.i.writeln' çalışıyorsa o zaman son satır da çalışmalıdır.

En iyisi hataları açık tutmak. Böylece onlar da bu konuları teker teker düşünürler ve bir yönde karar verirler.

Alıntı:
> Alıntı:
> >
> > Bir yapı veya sınıf tanımında birden fazla alias this bulunamaz.
> >

O söylediğim yanlış. Evet, bugün için doğru ama o bir dmd eksikliği. Aslında birden fazla 'alias this' olabilmeli.

Ali

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