D Dilindeki Tipleri Anlamak
Yazar: Zafer Çelenk
Tarih: 6 Mart 2012
Usta bir programcı olma yolunda tipler büyük önem taşır. Tipler hakkında bilgi vermeye başlamadan önce tiplere neden ihtiyacımız olduğu konusunu incelemek gerekir diye düşünüyorum.
Bildiğiniz gibi bilgisayarlar ikili sistemde çalışır yani bir bilgisayara bir şeyler anlatmak isterseniz bunu önce, bir (1) ve sıfırlardan (0) oluşan bir dizi haline getirip bilgisayara vermelisiniz. Ancak bu işlem biz insanlar için çok zor olduğundan dolayı biz anlatmak istediklerimizi kendi tanımladığımız dilde yazıp derleyiciler aracılığı ile bilgisayarların anlayacağı dile çeviriyoruz. Dolayısıyla eğer bir bilgisayarın belleğini çalışırken görebilseydik bir ve sıfırlardan oluşan diziler görürdük. Her şeyin bir ve sıfırlardan oluştuğu böyle bir dünyada neyin rakam neyin harf olduğunu anlamanın tek yolu bu bir sıfır dizilerini uygun bir şekilde işaretlemek olacaktır. İşte programcı olarak bizim yaptığımız da bilgisayara işlemek için verdiğimiz veriyi tipleri kullanarak işaretlemek ve bilgisayarın doğru bir şekilde işlemesini sağlamaktır.
D dilinde işaretli ve işaretsiz olarak ayrılan tipler bulunmaktadır. Bu işaret kavramını anlamak için bit düzeyine bir yolculuk yapmamız gerekir.
Gelin şimdi hep beraber belleğin derinliklerinde ne oyunlar dönüyor bakalım. Bildiğiniz gibi bilgisayarlar ikili sistemde çalışır ve ikili sistemde kullanabileceğiniz sadece iki sayı vardır 1 ve 0. Eğer 1 bit (Binary digiT) ile çalışıyorsanız ifade edebileceğiniz 2 sayı vardır 1 ve 0, eğer 2 bitle çalışıyorsanız aşağıdaki dört sayıyı ifade edebilirsiniz.
00 = 0 01 = 1 10 = 2 11 = 3
Eğer üç bit ile çalışıyorsanız sekiz sayıyı gösterebilirsiniz. Gördüğünüz gibi bir bitlik bir artış ifade edebileceğimiz değer sayısını iki katına çıkarmıştır.
000 = 0 001 = 1 010 = 2 011 = 3 100 = 4 101 = 5 110 = 6 111 = 7
Bu örneklerden de anlaşıldığı gibi eğer sekiz bite sahipseniz gösterebileceğiniz en büyük sayı 255 dir.
11111111 = 255
Burada gördüğünüz gibi sekiz bit bir araya gelerek 1 byte oluşturuyor. Bilgisayarların temelde kullandığı bilgi dizisi byte olarak kabul edilmiştir.
Bu durumda şöyle bir düşünelim, birler ve sıfırlardan oluşan bir dünyada negatif (-) bir değeri nasıl gösterebiliriz. Çözüm sekiz bitten oluşan dizinin ilk bitini sayının negatif olup olmadığını gösteren işaret biti olarak kullanmaktan geçer. Bu durumda verimizi göstermek için bize 7 bit kalır ve 7 bit ile göstereceğimiz en büyük sayı 127 olur. Buraya kadar yazdıklarımızı toparlayacak olursak eğer sayınız sıfırdan küçükse negatif olduğunu göstermek için ilk biti kullanmak zorundadır dolayısıyla size kalan 7 bit ile göstereceğiz en büyük sayı 127 olmaktadır. Aksi halde sayınız negatif değilse 8 bitide kullanabilirsiniz böylece gösterebileceğiniz en büyük sayı 255 olacaktır. İşte işaretli ve işaretsiz tip arasındaki temel fark budur.
TAMSAYI TİPLERİ
D dilinde işaretli ve işaretsiz olmak üzere toplam sekiz tane tamsayı tipi bulunur. D dilinde işaretsiz olan tiplerin başına "u" harfi getirilir. "u" harfi ingilizce "unsigned" yani işaretsiz kelimesinin baş harfinden gelmektedir. Ayrıca D dilinde 128 bitten oluşan cent ve ucent adında iki tip daha vardır ancak bunlar henüz kullanıma açılmamış ve ilerisi için hazırlanmıştır. Şimdi bunları sıra ile tanıyalım;
byte
ve ubyte
byte
tipi -128 ile 127 arasında değer alabilen işaretli 8 bitten oluşan bir tipdir. ubyte
ise byte
tipinin işaretsiz halidir ve negatif değer alamaz. sınırı ise 255 dir.
short
ve ushort
short
tipi -32_768 ile 32_767 arasında değer alabilen işaretli 16 bitten oluşan bir tiptir. ushort
ise short
tipinin işaretsiz halidir ve negatif değer alamaz. sınırı ise 65_535 dir.
int
ve uint
int
tipi -2_147_483_648 ile 2_147_483_647 arasında değer alabilen işaretli 32 bitten oluşan bir tiptir. uint
ise int
tipinin işaretsiz halidir ve negatif değer alamaz. sınırı ise 4_294_ 967_295 dir.
long
ve ulong
long
tipi -9_223_372_036_854_775_808 ile 9_223_372_036_854_775_807 arasında değer alabilen işaretli 64 bitten oluşan bir tiptir. ulong
ise long
tipinin işaretsiz halidir ve negatif değer alamaz. sınırı ise 18_446_744_073_709_551_615 dir.
KESİR SAYI TİPLERİ
Kayan noktalı sayılar olarakta bilinen kesirli sayıları barındıran tiplerdir. Bu tipler 1.25 gibi sayıları tutan tiplerdir. Bu tiplerde hassasiyeti tiplerin bit sayısı belirler. Bit sayısı ne kadar yüksek ise hassasiyet o kadar çoktur. Kesirli değerleri alabilen tek tipler bunlardır. Şimdi bunları sıra ile tanıyalım;
float
float
tipi 32 bitten oluşan kayan noktalı bir sayı tipidir.
double
double
tipi 64 bitten oluşan kayan noktalı bir sayı tipidir.
real
Donanımın tanımladığı en büyük kayan noktalı sayı tipidir. (Örneğin : x86 işlemcilerde 80 bit) veya double
'dir hangisi büyükse.
SANAL TİPLER
Karmaşık sayıların sadece sanal değerlerini taşıyabilen bir tipdir. Şimdi bunları sıra ile tanıyalım;
ifloat
ifloat
tipi sanal float tipidir.
idouble
idouble
tipi sanal double tipidir.
ireal
ireal
tipi sanal real tipidir.
KARMAŞIK SAYI TİPLERİ
Matematikte geçen karmaşık sayıları taşıyabilen bir tiptir. Şimdi bunları sıra ile tanıyalım;
cfloat
cfloat
tipi iki float tipden oluşan bir tipdir.
cdouble
cdouble
tipi iki double tipden oluşan bir tipdir.
creal
creal
tipi iki real tipden oluşan tipdir.
KARAKTER TİPLERİ
Karakter tipleri bellekte karakterleri tutabilen tiplerdir. Temel karakter kümesi ASCII olmakla birlikte daha farklı bir çok karakter kümesine ait karakterler bu tiplerle kullanılabilir. Şimdi bunları sıra ile tanıyalım;
char
char
tipi UTF-8 kod birimine uygun karakterleri tutabilen bir tipdir.
wchar
wchar
tipi UTF-16 kod birimine uygun karakterleri tutabilen bir tipdir.
dchar
dchar
tipi UTF-32 kod birimine uygun karakterleri tutabilen bir tipdir.
TİP NİTELİKLERİ
D dilindeki bu zengin tip çeşitlerini kullanarak programlarınızda işlemlerinizi rahat bir şekilde gerçekleştirebilirsiniz. Bunun yanında herhangi bir tip için bilgi almak istediğinizde D yine sizin yardımınıza yetişecektir. D 'nin tipler için tanımladığı nitelikler sayesinde istediğiniz tipin bilgilerini öğrenebilirsiniz. Bu niteliklere ulaşabilmek için tip isminden sonra bir nokta ve nitelik ismini yazmanız yeterli. Kısaca bu olanaklar;
stringof
İlgili tipin okunaklı ismidir. Örnegin: int.stringof
sizeof
İlgili tipin bayt olarak uzunluğudur; tipin kaç bitten oluştuğunu hesaplamak için bu değeri bir bayttaki bit sayısı olan 8 ile çarpmak gerekir. Örneğin: int.sizeof
min
İlgili tipin alabileceği en küçük değeri gösterir. Örneğin: int.min
max
İlgili tipin alabileceği en büyük değeri gösterir. Örneğin: int.max
Bu nitelikleri kullanan örnek bir kod aşağıdaki gibi yazılabilir.
import std.stdio; void main() { writeln("Tip : ", 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); }
D dilinde tipleri tanıtmaya çalıştım. Umarım D dilinin zenginliği sizi de etkilemiştir. D dili tipler yanında diğer pek çok özelliği ile ayrıca ilgi çekici ve güzel bir dildir. Umarım bu dile ilginiz artarak büyür.