Merhaba,
Yeni bir lezzetli örnek (bir o kadar da Gereksiz Bilgi Serisi) aşağıdadır:
(Ancak hala real sayılar üzerinden neden assert( a == b)
eşitliğini kullanamadığımı anlamadım. Bilen varsa (sanırım kayan nokta olayları?) ve izah ederse sevinirim!)
// eSAYI'sı 41'in karaköküdür:
enum real eSAYI = 6.40312423743;
// Bu derleme zamanında eSAYI'sının karesini alabilir:
enum Karesi(real n) = n * n;
// Aynı sayı statik bir forma bürünüyor!
static real sSAYI = eSAYI;
struct Foo
{
static real sRl;
//* Eğer static bir eleman varsa, kurucu this() olmalı ->
this(real sayı)
{
this.sRl = sayı;
}//*/
static real Pow()
{
return sRl^^2;
}
real rPow2(real base)
{
import std.math : pow;
return pow(base, 2);
}
string toString() const
{
import std.conv;
return to!string(sRl);
}
}
import
std.stdio;
void main()
{
/** 1. TEST: static üye **/
auto foo = Foo(sSAYI);
writeln(" - Yapı kurulurken sRl eşitliği = ", foo.sRl, " <-n²+1");
foo.sRl = foo.Pow + 1;// 42 (2. aldığı değer)
writeln(" - Karesi alınıp +1 ekli değeri = ", foo.sRl, " <-n²");// 42
write(" - Tekrar karesi hesaplatılırsa = ", foo.Pow, " n-> "); // 1764
auto bar = Foo();
bar.writeln;// 42 (ana! 42 2. aldığı değer hala burda)
/** 2. TEST: assert eşitliği **/
//assert(bar.sRl == 42.0L); /** Neden eşit olmaz **/
//assert(bar.rPow2(sSAYI) == 41.0L);
bar.rPow2(sSAYI).writeln;// 41
writeln(Karesi!eSAYI);// 41
//static assert(Karesi!eSAYI == 41.0L); /** Bu da eşit değilmiş! **/
}
Açıklama: Klasik bir n²+1 hesaplaması ile kod, karşınızda. Özelliği, statik elemanlı Foo(), bar olarak tekrar vücut bulduğunda 42'nin, "ben burdayım kardeşim" demesi :)
assert olayları ise bonus diyelim ve çalışmaması muhtemelen kayan nokta ile alakalı, ne dersiniz?
Sevgiler, saygılar...