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