Hayır yanlış gelmediniz...
Burası bilgisayar kodlarının konuşulduğu, kodlarımızı paylaştığımız bir yer. Ama başlıktaki yemeğin, hiçbir diyette olmaması gerektiğinde hemfikiriz :)
Walter, bu ay başında yapılan Dconf'22 konuşmasında şuna benzer tarifi (ah pardon, kodu) vermişti:
static struct BoolEnum(E)
{
private ubyte flags;
private template Impl(ubyte mask)
{
bool Impl(bool v)
{
v ? (flags |= mask) : (flags &= ~mask); // Deprecation'a girmiş :)
return v;
}
bool Impl() const scope
{
return !!(flags & mask);
}
}
static foreach(mem; __traits(allMembers, E))
{
mixin("alias "~mem~" = Impl!(1 << E."~mem~");");
}
auto getFlags()
{
return flags;
}
void setAll()
{
this.flags = ubyte.max;
}
}
Aslında aç programcımızı gereksiz ayrıntılarla boğmak istemiyorum. Sadece ye ve git ama kodu bu hale getirenlere haksızlık yapmayalım. Şurada, yukarıdaki yapı biraz geliştirildi ben ise kendime uyarladım ve 2 üye işlev ekledim.
Şimdi yapının işbirliği içinde çalıştığı bir enum yazalım (örn. Haftanın Günleri) ve bir de takma isim:
enum Günler {
Cumartesi, Pazar, Pazartesi,
Salı, Çarşamba, Perşembe, Cuma
}
alias bEnum8 = BoolEnum!Günler;
Hamburgerimiz neredeyse hazır! Bunun için AA (Associative Arrays) ekmeğini alıp keskin bir bıçak ile iki eşit parçaya böleceğiz. Sonra lezzetli malzemelerimizi sıcak sıcak, servise hazır bir şekilde yerleştireceğiz:
void main()
{
bEnum8[string] xDiyet = [
"Çorba" : bEnum8(),
"Brokoli" : bEnum8(),
"Kabak" : bEnum8(),
"Yoğurt" : bEnum8()
];
xDiyet["Brokoli"].Pazar = true; // Bu Karamelize Soğan
xDiyet["Yoğurt"].setAll(); // Bu da Rokfor Peynirli Sos
auto sorgu1 = "Yoğurt";
writef("Diyette %s var mı? ", sorgu1);
if(sorgu1 in xDiyet) "Var.".writeln;
else "Yok!".writeln;
write("Peki her gün mü? ");
if(xDiyet[sorgu1].tümHaftaTüket) "Evet.".writeln;
else "Hayır!".writeln;
}
N'oluya lan, dediğinizi duyar gibiyim. Çok güzel şeyler oluyor, merak ederseniz yazarım yine. Ama yazmadan denemeler yapın lütfen.
Dip Not: Bir de alakasız bir soru. Deprecation uyarı veren bir satır var. Bunu nasıl düzeltiriz?
Sevgiler, saygılar...