(Daha önce yazdıklarımın tekrarı olabilir; unutmuşum, kusura bakmayın. :))
Bu sınırlı bir stack, öyle mi? Uzunluğunu baştan belirliyoruz ve daha fazla büyütemiyoruz. Kabul ama hatalı indekslerin sessizce gözardı edilmelerinin yararını ben hâlâ göremiyorum. 16 gibi bir boyut belirlemişsem 20 yok demektir. 20'ye yazmak hata atmalı çünkü hatamı bilmek önemli.
set ve get'in @property olmaları kafa karıştırıyor. @property işlevlerini parantezsiz kullanmayı bekleriz ama ikisi de len alıyorlar (aslında len değil de, indeks (veya konum) olsa daha doğru).
Şu kodda ne olmasını bekliyoruz?
struct S
{}
auto s = Stack!S(10);
s.set = 3;
Sondaki atamanın hiçbir etkisi yok çünkü s.set(3) çağrılıyor; o referans döndürüyor; ve döndürülen referans ile hiçbir şey yapılmıyor.
Ayrıca set her çağrıldığında _Index'in arttırılması da doğru gelmiyor. Aynı elemana arka arkaya set(3) yapsam eleman mı ekleniyor?
Bu türler belki de tamamen tasarımlarına uygun davranıyorlardır ama isimleri "stack" olunca ister istemez alıştığımız stack veri yapısı gibi davranmasını bekliyorum.
Kodla ilgili kişisel bir sorunum var: main içindeki işlemlerin bazıları with içinde oluşturulan isimsiz nesne üzerinde uygulanıyor. with, o nesneyi koddan çıkartılmasına neden olduğu için kodun okunmasını güçleşiyor.
Bir örnek: with'in içinde geçen testArray'in de başında hiçbir belirteç yok. Kodu okurken "aslında belki de nesne.testArray'dir" diye düşünülebilir. with, kodun bütünüyle tanınmasını gerektiriyor:
with (birİfade()) {
foo(); // birİfade üzerinde mi işliyor?
bar(); // peki bu?
}
O soruları yanıtlayabilmek için hem birİfade'nin döndürdüğü türü bütünüyle tanımam gerek. Aşağıdaki kodun with'ten daha üstün olduğunu iddia ediyorum:
auto değer = birİfade();
değer.foo();
bar();
İşte şimdi foo()'nun birİfade()'nin döndürdüğü değer üzerinde işlediğini biliyorum. Hiçbir şey gizli değil.
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]