May 03, 2023

On Wednesday, 3 May 2023 at 15:02:00 UTC, Ali Çehreli wrote:

>

Yani, 'null' geçerli bir değer olamayacak. Öyleyse tamam.

Hiçbir zaman tamam olamaz 😀 D gibi sadelikte bir programalama dili olamaz! Yukarda kodladığımız her şeyi paketledim:

import std.stdio;
void main() {
  Lookup!string table;
  table.Doldur!"number_"(10);

  foreach(keys; table.tersSırala)
  {
    table[keys].writeln;
  }
  table["number_1"].writeln;
}

template Lookup(T, K = string) {
  struct Lookup {
    payload[K] table;

    alias Kur = set;
    auto set(K key, payload value) {
      return table[key] = value;
    }

    auto opIndex(K key) {
      return key in table ? table[key] : null;
    }

    auto opSlice() {
      return table.keys;
    }

    alias tersSırala = sort!"a > b";
    alias Sırala = sort;
    auto sort(string predicate = "a < b")() {
      import std.algorithm : sort;
      return this[].sort!predicate;
    }

    alias Doldur = fill;
    void fill(string id = "ID")(int loop) {
      import std.conv : text;
      while(--loop) {
        auto value = new payload(loop);
        set(id ~ loop.text, value);
      }
    }
  }

  class payload {
    T data;

    this(R)(R data) {
      import std.conv : to;
      this.data = data.to!T;
    }

    override string toString() {
      import std.format : format;
      return data.format!"Content: %s";
    }
  }
}

Tamam, Doldur() işlevi K türü ile uyumlu olmalı ama mükemmel olmasa da çağrışımsal diziler ile çalışırken güzel bir helper olduğu kanısındayım. Kesinlikle çok lezzetli, üstelik ref'leri uçurdum :)

Başarılar...

1 2
Next ›   Last »