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
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 işletir. Kendi yapamayacağı işleri ise bilgisayarın yan birimlerine devreder.

Bilgisayarlarda en küçük bilgi birimi, 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ğundan, 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" veya "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. Örneğin, oyun kağıdı gibi kavramlar, ileride anlatılacak olan yapılarla ve sınıflarla ama yine de temel türlerden yararlanarak ifade edilirler.

D'nin temel türleri diğer dillerin temel türlerine benzerler. Bu türlerin ayrıntılarını sonraki bölümlerde göreceğiz.

Mantıksal ifade türü

Mantıksal ifadelerde kullanılan ve "doğruluk" durumunda true, "doğru olmama" durumunda false değerini alan türdür:

Tür Açıklama İlk Değer
bool Bool değeri false
Tamsayı türleri

Tamsayılar, küsuratı olmayan sayılardır. Örneğin, 3 bir tamsayıdır ama 3.5 değildir. (Not: Çoğu programlama dilinde olduğu gibi, kesirler D dilinde de Türkçe yazım kurallarından farklı olarak virgülle değil, nokta ile ayrılır. O yüzden, normalde 3,5 olarak yazılması gereken değerleri metin içinde bile 3.5 olarak yazacağım.)

Hem eksi hem artı değer alabilen türler işaretli türlerdir. İsimleri eksi işaretinden gelir. Yalnızca artı değerler alabilen türler ise işaretsiz türlerdir. Bu türlerin isimlerinin başındaki u harfi, "işaretsiz" anlamına gelen "unsigned"ın baş harfidir.

Tür Açıklama İlk Değer
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 0LU
Kesirli sayı türleri

Kayan noktalı diye de anılan ve 1.25 gibi kesirli değerleri tutabilen türlerdir. Hesapların hassasiyeti türlerin bit sayısıyla doğru orantılıdır; yüksek bit sayısı yüksek hassasiyet sağlar. Bunların dışındaki türler kesirli değerler alamazlar. Örneğin int, yalnızca tamsayı değerler alabilir. nan, "not a number"ın kısaltmasıdır ve geçersiz kesirli sayı değeri anlamına gelir.

Tür Açıklama İlk Değer
float 32 bit float.nan
double 64 bit double.nan
real en az 64 bit ama donanım desteğine
göre daha fazla da olabilir
real.nan
Karakter türleri

Bu türler harfleri ve metinle ilgili başka her türlü işareti ifade etmek için kullanılırlar:

Tür Açıklama İlk Değer
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üğü 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, kesirli değerler için ise double türü uygundur.

Tür nitelikleri

Türler hakkında bilgi edinmek amacıyla kullanılan 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. Notlar: