Merhaba,
Başlık reklama benzedi: "ikisi bir arada sadece ....";
Öğle arasında, hobi maksatlı şöyle bir Çokuzlu(~demet) denemesi yaptım. Olanaklar çok iyi ve C++'ı aratmıyor:
// D 2.0.87'de denendi...
import std.typecons;
import std.format, std.stdio;
struct BiçimliMetin {
bool bold;
string data;
alias data this;
@property length ()
{
return data.length;
}
@property vowels()
{
size_t n;
foreach(c; data) if(isVowel(c)) {
n++;
}
return n;
}
private bool isVowel(dchar c) @safe pure nothrow @nogc
{
return c=='a'||c=='e'||c=='o'||c=='i'||
c=='u'||c=='U'||c=='O'||c=='I'||
c=='A'||c=='E';
}
@property toString()
{
string result = typeof(this).stringof;
result ~= format("(%s, %s, %d, %d",
bold ? "koyu":"normal",
data, length(), vowels);
return result ~ ")";
}
Tuple!(bool, string, size_t, size_t) demeti()
{
return tuple(bold, data,length, vowels);
}
}
enum str = "Onları çoook seviyoruz!";
void main()
{
BiçimliMetin birMetin;
//birMetin = str; /* Aslında bu yanlış kullanım!
birMetin.data = str;//*/
birMetin.bold = true;
birMetin.writeln; // içinde ne tutuyor, bakalım!
"Şimdi demeti çözüyoruz...".writeln("\n");
foreach(d; birMetin.demeti)
{
typeof(d).stringof.writeln(": ", d);
}
} /* ÇIKTISI:
BiçimliMetin(koyu, Onları çoook seviyoruz!, 25, 9)
Şimdi demeti çözüyoruz...
bool: true
string: Onları çoook seviyoruz!
ulong: 25
ulong: 9
*/
Benimle aynı hayranlık derecesinde olanlar; başka neler deneyebiliriz?
Başarılar...