April 05, 2016

http://dlang.org/changelog/2.071.0.html

Çöp toplayıcının bazı işlemleri de dahil olmak üzere bazı algoritmalar %5 kadar hızlanmış. Tabii bir çok hata da giderilmiş. Benim gözüme çarpan iki kullanışlı olanak:

  • Eşleme tablolarına yeni bir işlev: 'clear()' bütün elemanları siliyor.

  • Çok kullanışlı olmasına rağmen aralıklardan önce tasarlandığından 'reduce()' aralık algoritmalarında zincirleme olarak kullanılamaz. (Bunun nedeni, ilk parametresinin aralık olmamasıdır.) Yani, şu yazılamaz:

   dizi.reduce!((sonuç, a) => sonuç + a * a)(0)

Şöyle yazılmalıdır:

   reduce!((sonuç, a) => sonuç + a * a)(0, dizi)

Mevcut kodları bozmamak için onu düzeltmek yerine aynı biçimde işleyen ama parametre sırasını uygun hale getiren yeni bir işlev gelmiş: 'fold()'.

Örnek:

import std.stdio;
import std.algorithm;

void main() {
   {
       auto aa = [ 1 : "bir", 2 : "iki", 3 : "üç" ];
       writeln("Doluyken           : ", aa);

       // Artık tek işlevle boşaltabiliyoruz:
       aa.clear();
       writeln("clear()'den sonra  : ", aa);
   }

   writeln();

   {
       auto dizi = [ 1, 2, 3 ];
       writeln("Dizi               : ", dizi);

       auto ikiKatları = dizi.map!(a => a * 2);
       writeln("İki katları        : ", ikiKatları);

       // fold() aralık algoritmalarında zincirleme kullanılabiliyor:
       auto kareToplamları = dizi.fold!((sonuç, a) => sonuç + a * a)(0);
       writeln("Karelerinin toplamı: ", kareToplamları);

       auto reduceİle = reduce!((sonuç, a) => sonuç + a * a)(0, dizi);
       writeln("Aynısı reduce() ile: ", reduceİle);
   }
}

'
Doluyken : [3:"üç", 2:"iki", 1:"bir"]
clear()'den sonra : []

Dizi : [1, 2, 3]
İki katları : [2, 4, 6]
Karelerinin toplamı: 14
Aynısı reduce() ile: 14
'

Ali

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