Forum: Ders Arası RSS
alias this'in with içinde anlamını yitirmesi!
Avatar
Salih Dinçer #1
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: alias this'in with içinde anlamını yitirmesi!
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 dersinde bahsetmiş ve en sona önemli bir not düşmüş:

Bir yapı veya sınıf tanımında birden fazla alias this bulunamaz.
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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.

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
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-18, 17:27:32 (UTC -08:00)