(Bunu daha önce konuşmuştuk galiba. Az önce D.ershane'yi bu konuda düzelttim.)
C, C++ ve belki başka dillerde de hatalara neden olan bir konu, 0 ile başlayan hazır değerlerin sekizli düzende algılanmasıdır. Örneğin 020 yazınca değer 16'dır (2 çarpı 8 artı 0).
Ama işin kötüsü bu durum bazen farkedilmez ve hata bazen kodun içinde bir saatli bomba gibi bekler. Çünkü örneğin 007 hem ondalık hem de sekizli sistemde tesadüfen 7 değerindedir. Sonradan birisi 007'nin değerini 17 yaptığını düşünerek 017 yazar ama o sekizli düzende algılandığı için değeri aslında 15 olur (1 çarpı 8 artı 7).
Bu gibi karışıklıkları önlemek için D'de artık 0 ile başlayan hazır değerler yazılamıyor.
Onun yerine std.conv.octal ile açıkça "bu sekizli düzende yazılmıştır" demek gerekiyor. Şu program 12 hazır değerini dört sayı sisteminde yazdırıyor:
import std.stdio;
import std.conv;
void main()
{
int ondalık = 12;
int ikili = 0b1100;
int sekizli = octal!14;
int onaltılı = 0xc;
writefln("%s %s %s %s", ondalık, ikili, sekizli, onaltılı);
}
Çıktısı:
'12 12 12 12'
Bu arada octal, D'nin şablonlarının ve derleme zamanında kod üretmesinin (CTFE) güçlerini gösteren güzel bir örnek. octal da yasal olmayan sekizli değerleri derleme zamanında yakalıyor.
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]