6 days ago
string buildSwitch(string var, CASE[] cases)
{
  import std.string : format;
  import std.array : join;
  import std.algorithm : map;

  return format(
    q{
      switch(%s)
      {
%s
          Merhaba("Burası Top");
          break;
        default:
          assert(false);
      }
    },
    var,
    cases.map!(s => format("        case %s:", s)).join("\n")
  );
}

void Merhaba(string msg)
{
  "Heyy, merhaba!\n".
  writeln(msg);
}

enum CASE
{
  Top = 10,
  Max,
  Set,
  Min
}

import std.stdio;

int main()
{
  with(CASE) {
    pragma(msg, buildSwitch("SWITCH_İÇİNE YAZILAN",
                            [Top, Max, Set, Min]));
    auto seçenek = Top;

    mixin(
      buildSwitch("seçenek", [ Top, Max, Set, Min ]),
      "\"Burası hala with(CASE) içi, işte kanıtı: \".writeln(Set);"
    );

  }
  auto exitCode = CASE.Max - 1;
  "Ama burası çıkan rakamdan anlayın artık: ".writeln(exitCode);

  return exitCode;
}/* ÇIKTISI:
Heyy, merhaba!
burası Top
Burası hala with(CASE) içi, işte kanıtı: Set
Ama burası çıkan rakamdan anlayın artık: 10


------------------
(program exited with code: 10)
Press return to continue
*/

Bir de PRAGMA ÇIKTISI var, onu derlerken çalıştırmadan önce kendiniz göreceksiniz zaten. (D)ilin bu özelliklerini gördükçe D'de kod yazmayanlar çok şey kaybediyor!

D, yüksek sesle güldürür :D