D Programlama Dili – Programlama dersleri ve D referansı
Ali Çehreli

değişken: [variable], kavramları temsil eden veya sınıf nesnesine erişim sağlayan program yapısı
ilklemek: [initialize], ilk değerini vermek
kurma: [construct], yapı veya sınıf nesnesini kullanılabilir duruma getirmek
nesne: [object], belirli bir sınıf veya yapı türünden olan değişken
sınıf: [class], kendi üzerinde kullanılan işlevleri de tanımlayan veri yapısı
şablon: [template], derleyicinin örneğin 'türden bağımsız programlama' için kod üretme düzeneği
... bütün sözlük



İngilizce Kaynaklar


Diğer




auto ve typeof

auto

Bazen aynı ismin iki veya daha fazla modülde birden tanımlı olduğu durumlarla karşılaşılabilir. Örneğin birbirlerinden farklı iki kütüphanenin iki modülünde de File isminde bir tür bulunabilir. O ismi tanımlayan iki modülün birden eklenmesi durumunda da yalnızca File yazmak karışıklığa neden olur; derleyici hangi türün kullanılacağını bilemez.

Böyle durumlarda hangi modüldeki ismin kastedildiğini belirtmek için modülün ismini de yazmak gerekir. Örneğin File türü ile ilgili böyle bir isim çakışması olduğunu varsayarsak:

std.stdio.File dosya = std.stdio.File("ogrenci_bilgisi", "r");

O kullanımda uzun ismin hem de iki kere yazılması gerekmiştir: sol tarafta dosya nesnesinin türünü belirtmek için, sağ tarafta ise File nesnesini kurmak için.

Oysa derleyiciler çoğu durumda sol tarafın türünü sağ tarafın türüne bakarak anlayabilirler. Örneğin 42 gibi bir tamsayı değerle ilklenen bir değişkenin int olduğu, veya std.stdio.File kurularak oluşturulan bir nesnenin yine std.stdio.File türünden olduğu kolayca anlaşılabilir.

D'nin auto anahtar sözcüğü, sol tarafın türünün sağ taraftan anlaşılabildiği durumlarda sol tarafın yazımını kolaylaştırmak için kullanılır:

    auto dosya = std.stdio.File("ogrenci_bilgisi", "r");

auto'yu her türle kullanabilirsiniz:

    auto sayı = 42;
    auto kesirliSayı = 1.2;
    auto selam = "Merhaba";
    auto vida = BisikletVitesDüzeneğininAyarVidası(10);

"auto", otomatik anlamına gelen "automatic"in kısaltmasıdır. Buna rağmen türün otomatik olarak anlaşılması kavramı ile ilgili değildir. Aslında değişkenlerin yaşam süreçleri ile ilgili olan auto, tanım sırasında başka belirteç bulunmadığı zaman kullanılır.

Başka belirteçler de türün otomatik olarak anlaşılması için yeterlidir:

    immutable i = 42;

Zaten immutable yazılmış olduğu için türün değişmez bir int olduğu o yazımdan da otomatik olarak anlaşılır. (immutable anahtar sözcüğünü daha sonra göreceğiz.)

typeof

Bu anahtar sözcük, "türü" anlamına gelen "type of" deyiminden türemiştir. Kendisine verilen ifadenin (değişken, nesne, hazır değer, vs.) türünü o ifadeyi hiç işletmeden üretir.

Örneğin zaten tanımlanmış olan int türünde sayı isminde bir değişken olduğunu varsayarsak:

    int sayı = 100;        // bu zaten 'int' olarak tanımlanmış

    typeof(sayı) sayı2;    // "sayı'nın türü" anlamında
    typeof(100) sayı3;     // "100 hazır değerinin türü" anlamında

Yukarıdaki son iki ifade, şu ikisinin eşdeğeridir:

    int sayı2;
    int sayı3;

Türlerin zaten bilindiği yukarıdaki gibi durumlarda typeof'un kullanılmasına gerek olmadığı açıktır. Bu anahtar sözcük özellikle daha sonra anlatılacak olan şablon ve katma (mixin) olanaklarının kullanımında yararlıdır.

Problem

42 gibi bir hazır değerin D'nin tamsayı türlerinden int türünde olduğunu yukarıda okudunuz. (Yani short, long, vs. değil.) Bir program yazarak 1.2 gibi bir hazır değerin türünün D'nin kesirli sayı türlerinden hangisinden olduğunu bulun: float mu, double mı, yoksa real mi? Yeni öğrendiğiniz typeof ve Temel Türler bölümünde öğrendiğiniz .stringof işinize yarayabilir.