D Programlama Dili - Çözümler

İşlev Yükleme

Daha önce yazılan bilgiVer işlevlerinden yararlanan iki yüklemesi şöyle yazılabilir:

void bilgiVer(Yemek yemek) {
    bilgiVer(yemek.zaman);
    write('-');
    bilgiVer(zamanEkle(yemek.zaman, GününSaati(1, 30)));

    write(" Yemek, Yer: ", yemek.adres);
}

void bilgiVer(GünlükPlan plan) {
    bilgiVer(plan.sabahToplantısı);
    writeln();
    bilgiVer(plan.öğleYemeği);
    writeln();
    bilgiVer(plan.akşamToplantısı);
}

Bütün bu türleri kullanan programın tamamı:

import std.stdio;

struct GününSaati {
    int saat;
    int dakika;
}

void bilgiVer(GününSaati zaman) {
    writef("%02s:%02s", zaman.saat, zaman.dakika);
}

GününSaati zamanEkle(GününSaati başlangıç,
                     GününSaati eklenecek) {
    GününSaati sonuç;

    sonuç.dakika = başlangıç.dakika + eklenecek.dakika;
    sonuç.saat = başlangıç.saat + eklenecek.saat;
    sonuç.saat += sonuç.dakika / 60;

    sonuç.dakika %= 60;
    sonuç.saat %= 24;

    return sonuç;
}

struct Toplantı {
    string     konu;
    int        katılımcıSayısı;
    GününSaati başlangıç;
    GününSaati bitiş;
}

void bilgiVer(Toplantı toplantı) {
    bilgiVer(toplantı.başlangıç);
    write('-');
    bilgiVer(toplantı.bitiş);

    writef(" \"%s\" toplantısı (%s katılımcı)",
           toplantı.konu,
           toplantı.katılımcıSayısı);
}

struct Yemek {
    GününSaati zaman;
    string     adres;
}

void bilgiVer(Yemek yemek) {
    bilgiVer(yemek.zaman);
    write('-');
    bilgiVer(zamanEkle(yemek.zaman, GününSaati(1, 30)));

    write(" Yemek, Yer: ", yemek.adres);
}

struct GünlükPlan {
    Toplantı sabahToplantısı;
    Yemek    öğleYemeği;
    Toplantı akşamToplantısı;
}

void bilgiVer(GünlükPlan plan) {
    bilgiVer(plan.sabahToplantısı);
    writeln();
    bilgiVer(plan.öğleYemeği);
    writeln();
    bilgiVer(plan.akşamToplantısı);
}

void main() {
    immutable geziToplantısı = Toplantı("Bisiklet gezisi", 4,
                                        GününSaati(10, 30),
                                        GününSaati(11, 45));

    immutable öğleYemeği = Yemek(GününSaati(12, 30), "Taksim");

    immutable bütçeToplantısı = Toplantı("Bütçe", 8,
                                         GününSaati(15, 30),
                                         GününSaati(17, 30));

    immutable bugününPlanı = GünlükPlan(geziToplantısı,
                                        öğleYemeği,
                                        bütçeToplantısı);

    bilgiVer(bugününPlanı);
    writeln();
}

Yukarıdaki main, nesneler tanımlamak yerine yalnızca yapı hazır değerleri ile şöyle de yazılabilir:

void main() {
    bilgiVer(GünlükPlan(Toplantı("Bisiklet gezisi", 4,
                                 GününSaati(10, 30),
                                 GününSaati(11, 45)),

                        Yemek(GününSaati(12, 30), "Taksim"),

                        Toplantı("Bütçe", 8,
                                 GününSaati(15, 30),
                                 GününSaati(17, 30))));
    writeln();
}