Bunu konu dışı olarak açtım. Çünkü bir kısmı konu dışı bir kısmı konu içi olmuş oluyor.
Şimdi konu dışı olan kısım. Bu transmogrifier içine koyduğumuz bir şeyi başka bir şeye çeviren bir kutu mu. Bu mudur :)
http://images2.wikia.nocookie.net/__cb20070709025203/candh/images/5/5a/Transmogrifier_zap.png
Konuyla alakalı kısmına gelince bir diziyi ilklendirilmemiş olarak bırakıp, çalışma anında ilklendirmek için buradaki gibi başına 'void' koyuyoruz. Bu tür bir kullanım özellikle geçici bellek görevi gören büyük diziler için faydalı oluyor.
class Transmogrifier {
double[128] alpha = void;
size_t usedAlpha;
this() {
// usedAlpha = 0 ve alpha'yı ilklendirilmemiş olarak bırak
}
}
Buradaki örnekte 'Transmogrifier' sınıfı kullanılan 'alpha' miktarını değeri başlangıçta sıfır olan 'usedAlpha' isimli başka bir değişkende tutuyor. 'Transmogrifier''ın ilklendirilirken (kurucu işlevinde) 'usedAlpha' 0 değerini alıyor 'alpha' ilklendirilmemiş olarak kalıyor.
Kodumuz 'alpha[usedAlpha .. $]' aralığındaki elemanlara bir değer yazılmadan kesinlikle bu aralıktaki bir elemanın değerini okumamalıdır.
İngilizcesini de yazıyorum:
As 'usedAlpha' grows, the code must never read elements in the interval 'alpha[usedAlpha .. $]' before writing them.
Şimdi ben bu sınıfın gerçeklemesini düşünemiyorum. Yani bu sınıfa hangi durumda ihtiyaç duyarız. Sınıfın gerçekleme kısmı nasıl olur.
İkincisi bir diziyi ilklendirmemiş olarak bırakıp nasıl geçici bellek görevi gördürebiliriz.
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]