August 10, 2009

Dizilerle ilgili dersi yazarken şuna takıldım:

import std.stdio;

void main()
{
   // Ancak başına 'static' yazınca derleniyor
   int[200] seyrek_dizi = [ 50:111, 100:111 ];

   int indeks;
   while (indeks < seyrek_dizi.length) {
       write(seyrek_dizi[indeks], " ");
       ++indeks;
   }

   writeln();
}

Orada dizi tanımını 'static' veya 'const' yapmak gerekiyormuş. Koymayınca ilgisiz bir mesaj veriyor. (?) Daha anlamadım... :( Anlayan varsa anlatsın... :)

Ayrıca 'slice''ların yazımı da çok karışık. (Bu derste anlatmayacağım; sonraya bırakıyorum.) Dinamik diziye çok benziyor:

import std.stdio;

void main()
{
   int[10] statik_dizi;
   // statik_dizi.length = 7;  // HATA: uzunluğu değişmez

   int[] dinamik_dizi;
   dinamik_dizi.length = 10;   // uzunluğu değişir

   // dilim, statik_dizi'nin elemanlarına bir referans
   // oluyor.
   int[] dilim = statik_dizi[5..8];
   dilim[0] = 1; // statik_dizi[5]'e karşılık geliyor
   writeln("dilim, statiği değiştirdi  : ", statik_dizi[5]);

   // Sonundaki dup'a dikkat:
   int[] kopya = statik_dizi[5..8].dup;
   kopya[1] = 2; // statik_dizi[6]'nın kopyası
   writeln("kopya, statiği değiştirmedi: ", statik_dizi[6]);
}

Yani 'dilim''i değiştirince asıl dizi değişiyor, ama tabii 'kopya''yı değiştirince değişmiyor. Ama yazımlarındaki fark, o sondaki '.dup'. Bence farkını daha belirgin yapmalıymışlar. (Bir önerim yok ama. :D )

Ali

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