October 12, 2014

foreach döngüsünde dilim kullanıldığında otomatik olarak sayaç desteği olduğunu biliyoruz:

   foreach (sayaç, eleman; dilim)

Ne yazık ki başka türler için böyle bir destek bulunmuyor. Onun için şurada 'sequence!"n"' ve 'zip' çözümünü önermiştim:

http://ddili.org/ders/d/foreach_opapply.html

dmd 2.067 çok daha şık olan 'enumerate' ("numaralandır") algoritmasını getiriyor. FibonacciSerisi() üzerinde bir örnek:

struct FibonacciSerisi
{
   int baştaki = 0;
   int sonraki = 1;

   enum empty = false;

   @property int front() const
   {
       return baştaki;
   }

   void popFront()
   {
       int ikiSonraki = baştaki + sonraki;
       baştaki = sonraki;
       sonraki = ikiSonraki;
   }
}

import std.stdio;
import std.range;

void main()
{
   foreach (i, eleman; FibonacciSerisi().take(10).enumerate) {
       writefln("%s: %s", i, eleman);
   }
}

'enumerate' yerine 'sequence!"n"' ve 'zip' kullanıldığında ise daha karmaşık oluyordu:

   foreach (i, eleman; zip(sequence!"n", FibonacciSerisi()).take(10))

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 25, 2014

Bunu görmemişim, dikkatimden kaçmış! Teşekkürler hocam...

Programcı için hatırlanması kolay (çünkü dilimize İtalyanca'dan giren numero, onlara da Latince'den girdiği için) ve alternatif kullanımına göre az kaynak tüketen kısa kod iyi düşünülmüş görünüyor. Emeği geçen herkesi kutlarım; tabii ki son kertede Ali hocama :)

Sevgiler, saygılar...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]