February 02, 2011

Sizde söylediğinize göre konunun bağlantısını vereyim: http://ddili.org/forum/thread/36

Benden çok basit ancak bence çok kullanılacak bir örnek:

import std.stdio;

void main() {
  double[] c;
  c.length=2;
  //c = 4.5; // dizi uzunluğu iki olan ilklenmemiş dizimizin
  //2 elemanınında 4.5 olmasını bekleyebiliriz.
  //Ancak o iki elemanlı bir diziyi tek elemanlı bir değişkene atamaya çalışır ki doğru olan budur.
  //Dolasıyla hata verir.
  c[]=4.5;//dersek bütün elemanlarının 4.5 olması gerektiğini derleyiciye anlatmış oluruz.

  writeln(c);

}

Bu arada hiç aralıkla ilgili bir örnek vermedik. Aralıkla da kullanılabildiğini belirtmek gerekiyor:

import std.stdio;

void main() {
  double[] c;
  c.length=5;
  c[]=1;
  c[1..3] = 13;
  writeln(c);

}

Kesinlikle yararlı. Foreach ile aynı şey ancak daha anlaşılır oluyor.

Ancak normal kullanımda:

   dilim2 = dilim1;              // (1)
   dilim3[] = dilim1;            // (2)
   writeln(dilim2);
   writeln(dilim1[]);

bunların farkları yok değil mi?

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

February 02, 2011

Alıntı (canalpay):

>

Bunun yanıtı forumda var

Hatırladım. :) C (ve C++) dizilerini her taraflarıyla bilen birisi olarak D'nin dizilerine (ve dilimlerine) tedirginlikle yaklaşıyorum. Daha tam kavradığımdan emin değilim. Her taşın altından bir dizi olanağı çıkacak diye korkuyorum. :-p

Alıntı:

>

Bu olanak dizilerde döngü kullanıp elemanlarıyla işlem yapmamızı gereksizleştiriyor. Ali beyin verdiği örnekte farkını göremeyiz. :-)

Senin yerine ben bitirmekte olduğum yazıdan bir örnek koyayım:

import std.stdio;

void main()
{
   double[3] a = [ 10, 20, 30 ];
   double[3] b = [  2,  3,  4 ];

   double[3] sonuç = a[] + b[];

   writeln(sonuç);
}

Çok yararlı gibi görünüyor, değil mi. Çıktısı şöyle:

'[12, 23, 34]
'

Ali

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

February 02, 2011

Teşekkürler Can! Güzel örnekler...

Alıntı (canalpay):

>

Ancak normal kullanımda:

>     dilim2 = dilim1;              // (1)
>     dilim3[] = dilim1;            // (2)
>     writeln(dilim2);
>     writeln(dilim1[]);
> ```

>
> bunların farkları yok değil mi?

Yok gibi görünüyor ama var. Benim tehlikeli bulduğum da zaten o:

(1)'in anlamı: dilim2, dilim1'in erişim sağladığı elemanlara erişim sağlamaya başlar. Yani birisi yoluyla yapılan eleman değişiklikleri diğerinde de görülür.

(2)'nin anlamı: dilim3'ün elemanlarının değerlerini dilim1'in elemanlarının değerlerinin aynısı yap.

Yeni ders hazır:

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

Orada "Bütün elemanlar üzerindeki işlemler" başlığının sonunda geçiyor.

Ali

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