August 20

Aşağıdaki örneğin içine bir de dilimleri katsaydık kolay kolay bitmezdi. Sonuçlar olması gerektiği gibi, derlemenize bile gerek yok ama D'nin kolaylığı gözler önünde ve sadece kendim için bilgi tazelemeye yaradı! Belki sizin de işinize yarar ha?

import std.algorithm, std.stdio;

void main()
{
  int[4] dizi0 = [1, 2, 3, 4];

  auto dizi1 = new int[4];
  auto dizi2 = new int[](4);
  auto dizi3 = new int[][](4, 4);

  void print() {
    dizi0.length.write(": ", dizi0);
    writeln(" (statik) ");

    dizi1.length.write(": ", dizi1);
    writeln(" (dinamik) ");

    dizi2.length.write(": ", dizi2);
    writeln(" (dinamik) ");

    dizi3.writeln("\n");
  }
  print();

  dizi1 = dizi0; // statik diziden dinamik diziye kopyalama
  dizi2 = dizi1.dup.reverse; /*
 dizi1 != dizi2   ^-- bu olmasaydı dizi1.equal(dizi2) olurdu*/

  print();

  dizi3[0] = dizi1;
  dizi3[1] = dizi2;


/*dizi0.length += 2; çünkü statik!
  Hata: cannot modify constant `4LU`*/
  dizi1.length += 2;
  dizi2.length += 2;
  dizi3.length -= 2;

  print(); // artık dizimiz 2x4 oldu
  dizi3.writeln;

  dizi1.length = 0;
  dizi2.length = 0;

  print(); // dizi3, diğerlerinden bağımsız hala var
}

/* ÇIKTISI:

4: [1, 2, 3, 4] (statik)
4: [0, 0, 0, 0] (dinamik)
4: [0, 0, 0, 0] (dinamik)
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

4: [1, 2, 3, 4] (statik)
4: [1, 2, 3, 4] (dinamik)
4: [4, 3, 2, 1] (dinamik)
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

4: [1, 2, 3, 4] (statik)
6: [1, 2, 3, 4, 0, 0] (dinamik)
6: [4, 3, 2, 1, 0, 0] (dinamik)
[[1, 2, 3, 4], [4, 3, 2, 1]]

[[1, 2, 3, 4], [4, 3, 2, 1]]
4: [1, 2, 3, 4] (statik)
0: [] (dinamik)
0: [] (dinamik)
[[1, 2, 3, 4], [4, 3, 2, 1]]
*/

SDB@79