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 değişkenin, nesnenin, hazır değerin, vs. türünü ü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 daha sonra anlatılacak olan şablonlar konusunda, ve bu dersin probleminde yararlı olacak.
Problem
- 42 gibi bir hazır değerin D'nin tamsayı türlerinden
inttüründe olduğunu yukarıda okudunuz. (Yanishort,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:floatmu,doublemı, yoksarealmi? Yeni öğrendiğiniztypeofve temel türler dersinde öğrendiğiniz.stringofişinize yarayabilir.
D.ershane
Forum
Wiki
Projeler
Tanıtım
İletişim
Hakları