August 01, 2021

Bir süredir forumlarda şu konu dikkatimi çekiyordu ve yeni deneme fırsatı buldum:

https://github.com/dlang/druntime/pull/1756

Eğer yazdığınız kod tek modülden oluşmuyorsa gerçekten işe yarayabilir. Ama aşağıdaki gibi herşey aynı yerde çalışıyorsa kanıtladığım gibi belki %50 faydalı olacaktır...

import std.string, std.stdio;
import std.datetime;

/* (1)
  SİSTEM BU ŞABLON OLMADAN ÇALIŞMIYOR
 */

template from(string moduleName)
{
  mixin("import from = " ~ moduleName ~ ";");
}

/* (2)
  AMA BÜTÜN TANTANA BUNUN İÇİN YAPILIYOR...
 */

auto zaman(T)(from!"std.datetime".SysTime a,
 T value) if (from!"std.traits".isIntegral!T)
{
   return format("%s %s", a, value);
}

/* (3)
  YUKARIDAKİ ÖNERİLEN AMA YİNE IMPORT GEREKTİRDİ: SysTime
 */

auto zaman(T)(SysTime a, T value)
if (from!"std.traits".isSomeString!T)
{
   return format("%s %s", a, value);
}

/* (4)
  BU BENİM DEĞİŞTİRDİĞİM,FAYDASI:
  isSomeString ÖZELLİĞİNİ IMPORTSUZ KULLANMAK!

  AMA AŞAĞIDAKİ İŞLEV BU OLANAKTAN YOKSUN!
 */

void foo(T)(T bar) if (isSomeString!T) {}

void main()
{
  //foo("bar"); // BOŞUNA AÇMAYIN DERLENMEYECEK...
  Clock.currTime.zaman("TSİ").writeln;
  Clock.currTime.zaman(41).writeln;
} /* ÇIKTISI:
2021-Aug-01 14:16:06.769207 TSİ
2021-Aug-01 14:16:06.7692563 41
*/

(3) numaraları notta işaret ettiğim gibi, işleve bildireceğiniz tür (SysTime) eğer kendi public modülünüzden (gerçi bunu denemedim, emin değilim!) gelmediyse kodu derleyemeyeceksiniz.

(1)'de yer alan kod ile bize farkettirmeden import edilecek modülü derleme anında ekliyor. Bu şahane ve belki ileride yeni sürümlerde D olanağı haline gelecek.

Son olarak (2) ve (4)'de isSomeString gibi olanakları kullanmak daha kolay olacağa benziyor. Özetle bu olanağa gerçekten ihtiyacımız var!

Teşekkürler...