February 24, 2012

Alıntı (Salih Dinçer):

>

(*) Eğer 'foreach()' önüne yapının kopyasını birbirine eşitlemezseniz (baştaki = sonraki;) çalışma zamanı hatası verecektir!

Neden?

Doğrusu ikinci mesajını okuyana kadar baştaki = sonraki; satırını bulamamıştım. İkinci mesajı okuyunca ilgili satırı gördüm ve incelmeye başladım. Kodu kendimce yeniden şöyle düzenledim;

import std.stdio;
import std.string;
import std.conv;

struct Atom
{
   Atom* element;          // Eğer adres değeri F70 ile bitiyorsa,
   ubyte proton;           // 2. eleman türden bağımsız F74 oluyor

   this(Atom* a, ubyte b)
   {
       this.element = a;
       this.proton = b;
   }

   void atomuEkle(ref Atom* sonraki, ubyte değeri)
   {
       auto ekle = new Atom(null, değeri);
       sonraki.element = ekle;
       sonraki = ekle;
   }

   string toString() const
   {
       string tamami = format("%X -> %d", &proton, proton);
       if (element) tamami ~= "\n" ~ to!string(*element);

       return tamami;
   }
}

void main ()
{
   Atom* bastaki;

   Atom* sonraki = new Atom(null, 1);    // Hidrojen (en basit element!)

   bastaki = sonraki;
   foreach(ubyte atomNumarasi; 2..4)
   {
       sonraki.atomuEkle(bastaki, atomNumarasi);
   }

   writeln(to!string(*sonraki));
}

Öncelikle hatayı tespit edelim. Buradaki hata aşağıdaki metotda bulunan sonraki.element = ekle; satırından kaynaklanıyor.

void atomuEkle(ref Atom* sonraki, ubyte değeri)
{
   auto ekle = new Atom(null, değeri);
   sonraki.element = ekle;
   sonraki = ekle;
}

Bu metotda (sonraki.element = ekle;) satırında sonraki isimli göstergenin gösterdiği yapının element üye değişkenine ekle isimli düğümü aktarmak istiyorsun. Peki sonraki göstergesi nereden geliyor bakalım;

foreach(ubyte atomNumarasi; 2..4)
   {
       sonraki.atomuEkle(bastaki, atomNumarasi);
   }

sonraki göstergesi aslında main() içinde tanımlanmış bastaki göstergesinin ta kendisi. Peki bastaki değişkeni bir düğümü gösteriyormu, eğer bastaki=sonraki; ataması yapılmamışsa tabi ki hayır.

İşte senin baştaki = sondaki; ataması ile yaptığın null olan bastaki göstergesine bir düğüm atamak ve dolayısıyla ilerleyen satırlarda bu düğüme ekleme yaparken üye değişkenlere ulaşabilme imkanına kavuşmak.

Biraz karıştırdım farkındayım :) Kısaca null olarak gönderdiğin bir değerden dolayı olay karışıyor.

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

February 24, 2012

Estağfirullah, ben karıştırmışım hatta parça parça kod vermek yerine kodun tamamını verseydim (yukarıda yazdıklarımı tekrarlamayım istedim) boşuna uğraştırmazdım...

Aslında GoLang'ın sitesinde olduğu gibi basit D kodlarını site üzerinde deneyebilseydik ne iyi olurdu değil mi? Düşünsenize kod etiketi içinde kalan bölümü script gibi derlemeden ekrana (ayrı bir pencereye) basan küçük bir düğme (run) olsaydı...:)

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

February 24, 2012

Alıntı (Salih Dinçer):

>

Aslında GoLang'ın sitesinde olduğu gibi basit D kodlarını site üzerinde deneyebilseydik ne iyi olurdu değil mi? Düşünsenize kod etiketi içinde kalan bölümü script gibi derlemeden ekrana (ayrı bir pencereye) basan küçük bir düğme (run) olsaydı...:)

İsteklerin sonu yok tabi :) Olabilir elbette neticede buda bir görüş ama benim ekrandaki kodu alıp kendi çalışma ortamıma aktarıp çalıştırmam sadece 5-10 saniyemi alıyor.

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

1 2 3
Next ›   Last »