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. ]