December 25, 2022

Merhaba,

Bir süredir rafa kaldırdığım bir şablonum vardı. Yeni sürümünü yapmadan önce halihazırda kullndığım ürkütücü görünmeyen basit şekerlememiz var!

Sizce de D'de ekrana bir şey yazarken çok uğraşmıyor muyuz? Artık ne import ile ne de C'den alınmış parametreleri defalarca ve defalarca kullanmanıza gerek yok. Üstelik sep enum'u ile oynayarak kişiselleştirebilirsiniz:

template print(string SPR = "none", ARG...)
{
  enum sep
  {
      enter = "\n",
          s = "%s",
          u = s ~ "_",
          n = s ~ enter,
         dn = n ~ enter,
          a = "%(" ~ n ~ "%)",
         an = a ~ enter,
          h = "%X",
         hn = h ~ enter,
        b64 = "%064b",
       b64n = b64 ~ enter,
       none = s // default value
  }
  void print(ARG args)
  {
    import std.stdio : writef, writeln;

    static foreach(arg; args)
      mixin("writef(sep." ~ SPR~ ", arg);");
    static if(SPR == "none") writeln;
  }
}

void main()
{
  // klasik örneğimiz ile başlayalım...
  auto dstr = "Fıstıkçı Şahap"d;
  dstr.print!"n"; // veya aynısı:
  dstr.print; // varsayılan "none"

  // evet, kafa karıştırıcı örnek: selfSplit
  print!"an"([dstr[0..8], dstr[9..$]]);

  // sanırım bu daha basit 😀
  auto dizi = [ "fıstık", "şeker", "yağ", "un"];
  dizi.print!"an";

  // çoklu başka örnekler de var:
  auto i = 42; // bir tam sayı tanımla
  i.print!"h"; // heksadesimal olarak yaz
  print(" = (dec): ", i, " kırkiki"); // çoklu
}

Ben bunu kullanıyorum ve çok mutluyum. Her şey statik olduğu için aslında writef'leri sizin yerinize derleyici oracığa iliştiriyor. Yan etki yok ve her şey kurala uygun.

Başarılar...