December 23, 2021

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...