Merhaba,
Uzun uzadıya değinilebilir! Sanırım kısa kısa örnekler ile devam edersek daha çok şey anlayacağız...:)
Aralıkları ilk gördüğümde bana garip geliyorlardı ve pek anlamıyordum. Bunun sebebi, aralıkları(range) ilk olarak D'de tanımam olabilir. Bilmiyorum, başka dillerde kullanılmaya başlandı mı?
Belki fikir sahibi olmak için, ilk önce D.ershane'deki şu başlığı okumalısız:
http://ddili.org/ders/d/araliklar.html
Şimdi anladığımı yazacağım, bu örnek ile doğrulamaya çalışacağım. Ancak bu örnekler belden aşağı olacak! Yani farklı örnekler olacak. Maksat uçlarda gezip işin doğasını, sınırını gözlemlemek. Güncel olduğu için aklıma ilk gelen örnek:
struct Foo
{
int i;
bool empty() {
return i == 16;
}
int front() {
return i;
}
void popFront() {
i++;
}
}
import std.stdio;
void main() {
Foo foo;
foreach(f; foo)
{
f.write("-", foo.front, " ");
}
writeln;
}
Yukarıda basit bir aralık örneği görüyoruz. Sayaç vazifesi gören i değişkeni ile 3 tane özelleştirilmiş işlevlerimiz var. Yaptıkları gerçekten çok basit öyle değil mi? Sayalım, i'nin:
- 16'ya eşit olup olmadığını sorguluyor
- içerdiği değeri gönderiyor
- değerini bir arttırıyor
Sonuçta 0'dan 15'e kadar ekrana sayıları yazıyoruz. Çünü empty()'den true onayı gelmediği müddetçe döngü dönmeye ve front()'dan aldığı veriyi ekrana yazmaya devam ediyor. Yani bütün olay yukarıda maddelediğim sırada devam ediyor...
Peki f değişkeni döngü tarafından alınan front()'un bir kopyası ise aynı anda front()'u yazdırdığımızda ne olmasını beklersiniz? Aşağıdaki gibi bir sonuç olabilir mi?
Alıntı:
>'0-0 1-0 2-0 3-0 4-0 5-0 6-0 7-0 8-0 9-0 10-0 11-0 12-0 13-0 14-0 15-0 '
Evet, sonuç gerçekten böyle çıkıyor. Yani her zaman aralığın en başındaki elemanı veriyor. Bu bana garip geliyor ve niye olduğunu anlamaya çalışıyorum. Belki de henüz aralıkları tam olarak anlayabilmiş değilimdir...:)
Başarılar...
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]