Bu bana uzaktan ilgili bir konuyu hatırlattı: main'in parametrelerinde dilimler kullanışlı olabiliyor. Örneğin komut satırındaki bütün sayıları toplayan bir program yazsak:
topla 1 2 3 4 5
main'in ilk parametresi programın ismi olan 'topla' olduğu için, ondan kurtulmak çok kolay:
import std.conv;
import std.stdio;
int hepsiniTopla(string[] sayılar)
{
int toplam;
foreach (sayı; sayılar) {
toplam += to!int(sayı);
}
return toplam;
}
void main(string[] parametreler)
{
if (parametreler.length > 1) {
writeln("Sonuç: ", hepsiniTopla(parametreler[1..$]));
}
}
O programı yazdıktan sonra hepsiniTopla'ya gerek olmadığını da farkettim. std.algorithm'deki map, belirtilen işlevi, kendisine verilen aralığa uygular ve sonucu yine bir aralık olarak döndürür. reduce ise kendisine verilen bir aralığı bir işlemden geçirir ve tek bir değer döndürür.
O ikisini kullanınca yukarıdaki program daha kısa hale geliyor:
import std.stdio;
import std.algorithm;
void main(string[] parametreler)
{
if (parametreler.length > 1) {
writeln("Sonuç: ",
reduce!("a + b")(map!("to!int(a)")(parametreler[1..$])));
}
}
Evet, biraz okunaksız oluyor ama olsun... :)
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]