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

bayt: [byte], 8 bitlik tür
bit: [bit], 0 ve 1 değerlerini alabilen en temel bilgi birimi
işaretli tür: [signed type], eksi ve artı değer alabilen tür
işaretsiz tür: [unsigned type], yalnızca artı değer alabilen tür
kayan noktalı sayı: [floating point], kesirli sayı
mikro işlemci: [CPU], bilgisayarın beyni
nitelik: [property, attribute], bir türün veya nesnenin bir özelliği
sanal sayı: [imaginary number], salt sanal değerden oluşan karmaşık sayı
sınıf: [class], kendi üzerinde kullanılan işlevleri de tanımlayan veri yapısı
yapı: [struct], başka verileri bir araya getiren veri yapısı
... bütün sözlük



İngilizce Kaynaklar


Diğer




Temel Türler

Bir bilgisayarın beyninin mikro işlemci olduğunu gördük. Bir programdaki işlemlerin çoğunu mikro işlemci yapar. Kendi yapmadığı işleri de bilgisayarın yan birimlerine devreder.

Bilgisayarlarda en küçük bilgi miktarı, 0 veya 1 değerini tutabilen ve bit adı verilen yapıdır.

Yalnızca 0 ve 1 değerini tutabilen bir veri türünün kullanımı çok kısıtlı olduğu için, mikro işlemciler birden fazla bitin yan yana getirilmesinden oluşan daha kullanışlı veri türleri tanımlamışlardır: örneğin 8 bitten oluşan bayt veya 32, 64, vs. bitten oluşan daha büyük veri türleri... Eğer türlerden N bitlik olanı bir mikro işlemcinin en etkin olarak kullandığı tür ise, o mikro işlemcinin N bitlik olduğu söylenir: "32 bitlik işlemci", "64 bitlik işlemci", gibi...

Mikro işlemcinin tanımladığı veri türleri de kendi başlarına yeterli değillerdir; çünkü örneğin öğrenci ismi gibi veya oyun kağıdı gibi özel bilgileri tutamazlar. Mikro işlemcinin sunduğu bu genel amaçlı veri türlerini daha kullanışlı türlere çevirmek programlama dillerinin görevidir. D'nin temel türleri bile tek başlarına kullanıldıklarında oyun kağıdı gibi bir kavramı destekleyemezler. O tür kavramlar ileride anlatılacak olan yapılarla ve sınıflarla ifade edilirler.

D'nin temel türleri çoğunlukla diğer dillerdeki temel türlere benzerler. Ek olarak, D'de belki de ancak bilimsel hesaplarda işe yarayan bazı ek türler de bulunur.

Tabloda kullanılan terimlerin açıklamalarını aşağıda bulacaksınız.

D'nin Temel Veri Türleri
Tür Açıklama İlk Değeri
bool Bool değeri false
byte işaretli 8 bit 0
ubyte işaretsiz 8 bit 0
short işaretli 16 bit 0
ushort işaretsiz 16 bit 0
int işaretli 32 bit 0
uint işaretsiz 32 bit 0
long işaretli 64 bit 0L
ulong işaretsiz 64 bit 0L
float 32 bit kayan noktalı sayı float.nan
double 64 bit kayan noktalı sayı double.nan
real ya donanımın (mikro işlemcinin) tanımladığı en büyük kayan noktalı sayı türüdür (örneğin, x86 mikro işlemcilerinde 80 bit), ya da double'dır; hangisi daha büyükse... real.nan
ifloat sanal float değer float.nan * 1.0i
idouble sanal double değer double.nan * 1.0i
ireal sanal real değer real.nan * 1.0i
cfloat iki float'tan oluşan karmaşık sayı float.nan + float.nan * 1.0i
cdouble iki double'dan oluşan karmaşık sayı double.nan + double.nan * 1.0i
creal iki real'den oluşan karmaşık sayı real.nan + real.nan * 1.0i
char UTF-8 kod birimi 0xFF
wchar UTF-16 kod birimi 0xFFFF
dchar UTF-32 kod birimi ve Unicode kod noktası 0x0000FFFF

Bunlara ek olarak hiçbir türden olmama kavramını ifade eden void anahtar sözcüğü de vardır. cent ve ucent anahtar sözcükleri, işaretli ve işaretsiz 128 bitlik veri türlerini temsil etmek üzere ilerisi için ayrılmışlardır.

Aksine bir neden bulunmadığı sürece genel bir kural olarak tam değerler için int kullanabilirsiniz. Kesirli değerleri olan kavramlar için de öncelikle double türü uygundur.

Tablodaki terimlerin açıklamaları aşağıdaki gibidir:

Tür nitelikleri

D'de türlerin nitelikleri vardır. Niteliklere türün isminden sonra bir nokta ve nitelik ismiyle erişilir. Örneğin int'in .sizeof niteliğine int.sizeof diye erişilir. Tür niteliklerinin yalnızca bazılarını burada göreceğiz; gerisini sonraki bölümlere bırakacağız:

Bu nitelikleri int türü üzerinde gösteren bir program şöyle yazılabilir:

import std.stdio;

void main() {
    writeln("Tür                 : ", int.stringof);
    writeln("Bayt olarak uzunluğu: ", int.sizeof);
    writeln("En küçük değeri     : ", int.min);
    writeln("En büyük değeri     : ", int.max);
    writeln("İlk değeri          : ", int.init);
}

Programın çıktısı:

Tür                 : int
Bayt olarak uzunluğu: 4
En küçük değeri     : -2147483648
En büyük değeri     : 2147483647
İlk değeri          : 0
size_t

Programlarda size_t türü ile de karşılaşacaksınız. size_t bütünüyle farklı bir tür değildir; ortama bağlı olarak ulong veya başka bir işaretsiz temel türün takma ismidir. İsmi "size type"tan gelir ve "büyüklük türü" anlamındadır. Adet gibi saymayla ilgili olan kavramları temsil ederken kullanılır.

Asıl türünün sisteme göre farklı olmasının nedeni, size_t'nin programın kullanabileceği en büyük bellek miktarını tutabilecek kadar büyük bir tür olmasının gerekmesidir: 32 bitlik sistemlerde uint ve 64 bitlik sistemlerde ulong. Bu yüzden, 32 bitlik sistemlerdeki en büyük tamsayı türü size_t değil, ulong'dur.

Bu türün sizin ortamınızda hangi temel türün takma ismi olduğunu yine .stringof niteliği ile öğrenebilirsiniz:

import std.stdio;

void main() {
    writeln(size_t.stringof);
}

Yukarıdaki programı denediğim ortamda şu çıktıyı alıyorum:

ulong
Problem

Diğer türlerin de niteliklerini yazdırın.

Not: İlerisi için düşünüldükleri için geçersiz olan cent ve ucent türlerini hiçbir durumda kullanamazsınız. Bir istisna olarak, hiçbir türden olmamayı temsil eden void türünün ise .min, .max, ve .init nitelikleri yoktur.

Ek olarak, .min niteliği kesirli sayı türleriyle kullanılamaz. Eğer bu problemde bir kesirli sayı türünü .min niteliği ile kullanırsanız derleyici bir hata verecektir. Daha sonra Kesirli Sayılar bölümünde göreceğimiz gibi, kesirli sayı türlerinin en küçük değeri için .max niteliğinin eksi işaretlisini kullanmak gerekir (örneğin, -double.max).