September 02

Yeni bir şey öğrendim, şurda ve çalışan kod aşağıda. Kaynağındaki (evilrat'ın çözümü) sözde kod olduğu için çalışmıyor...

struct Alan
{
  int en, boy;
}
alias Oda = Alan[string];

void var_Mı(Value, Key, Func)
(Value[Key] liste, Key isim, in Func fun)
{
  if (auto adresi = isim in liste)
  {
    fun(*adresi, isim);

  } else {

    isim.writeln(" bulunamadı!");
  }
}

enum evinNeresi = [ "Mutfak", "Salon",
"Yatak Odası"];

import std.stdio;
void main()
{
  Oda evimde = [evinNeresi[0]: Alan(3, 5),
                evinNeresi[2]: Alan(7, 4)
  ];

  evimde.var_Mı(evinNeresi[2],
  // Alanı hesaplama, tabi listede varsa:
    (Alan oda, string isim)
    {
      auto alan = oda.en;
           alan *= oda.boy;
      isim.write(" m²'si: ", alan);
    }
  );
}

Bu kodda temel nokta var_Mı() ismindeki işlev. Öyle bir yardımcı ki bu, çağrışımsal dizilerle çalışırken her yerde kullanabilirsiniz ve kullandığınız yerde ona yeni bir kişilik katabilirsiniz.

Çünkü 2 parametreli (biri key) lambda işlev alıyor. Eğer işlem listede yoksa ya hiçbir şey yaptırmaz, ya hata kodu atabilir, ya da koddaki gibi sıradan bir uyarı yazdırabilirsiniz.

Not: Listeye (evimde dizisi) 0 ve 2 numaralı eleman ekleniyor, eğer uyarı mesajını görmek istersen 1 numarayı sorgulatmayı deneyin.

SDB@79

September 06

On Monday, 2 September 2024 at 18:07:42 UTC, Salih Dincer wrote:

>

Yeni bir şey öğrendim...

Yeni ama taaa eskilerden gelen bir şey daha:

    auto aa = ["bir": 1, "iki": 2];
    auto aaa = [1: 10, 2: 20];

    alias AA = typeof(aaa); //alias AA = int[string];

    static if (is(AA T : T[U], U : string))
    {
      typeid(U).writefln!"evet, istediğim gibi key bir %s";
      aa["bir"].writefln!"bir'in sayısal değeri = %s";
    }

Anlatımına gelince...

Diyelim ki bir işleve parametre olarak çağrışımsal dizi (AA: Ali hocanın kitabında Eşleme Tabloları) verdiniz. Derleme anında neyin indeks (key) neyin veri (value) olduğu belli ama sizin işlevinizi kullanan bunu bilmeyebilir. Yani tıpkı bu başlığın konusundaki gibi esnek bir işleviniz olabilir!

Öyleyse ve yine diyelim ki indeksleri dizge (string) değer olanlara göre muamele yapmanız gerektiğinde, yukardaki gibi bir static if() ile kodu güven altına alabilirsiniz. Özetle bu kodun tamamı programa dahil edilmeyecektir; taa ki takma isim (alias) AA, aa'nın türünü gösterene kadar. Çünkü o zaman doğru bir türü kullandığınız anlamına gelecek.

SDB@79