September 02, 2015

http://dlang.org/phobos/std_functional.html#.pipe bu adresteki pipe komutu nedir ve nasıl kullanılır? Şöyle bir koda denk geldim ve çözmeye çalışıyorum.

// Get your local weather report
//pragma(lib, "curl");
import std.functional;
import std.json;
import std.net.curl;
import std.stdio;
import std.string;

alias getJSON = pipe!(get, parseJSON);
auto K2C = (float f) => f - 273.15;
auto K2F = (float f) => f / 5 * 9 - 459.67;

void main()
{
   auto loc = getJSON("ipinfo.io/")["loc"].str.split(",");

   auto resp = getJSON("api.openweathermap.org/data/2.5/weather" ~
       "?lat=" ~ loc[0] ~ "&lon=" ~ loc[1]);

   auto city = resp["name"].str;
   auto country = resp["sys"]["country"].str;
   auto desc = resp["weather"][0]["description"].str;
   auto temp = resp["main"]["temp"].floating;

   writefln(`
       +-----------------------------------------+
       |%s|
       +-----------------------------------------+
       |  weather      |  %-23s|
       +-----------------------------------------+
       |  temperature  |  %.2f°C (%.2f°F)      |
       +-----------------------------------------+
       `.outdent,
       centerJustifier(city ~ ", " ~ country, 41),
       desc, temp.K2C, temp.K2F);
}

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

September 02, 2015

pipe, Unix kabuklarından tanıdığımız '|' karakterinin işlevlerle kullanılan eşdeğeri. Kabukta kullandığımızda solundaki programın çıktısını sağındakinin girişine bağlar:

'find | grep aradigim_dosya'

pipe() işlevi ise şablon parametreleri olarak verilen işlevleri işletiyor ve onların sonuçlarını bir sonraki işleve parametre olarak geçiriyor. Gösterdiğin kodda önce get() işlevi çağrılacak ve onun sonucu parseJSON() işlevine verilecek. Ek: İlk işlevin kullanacağı parametre ise pipe'a kendi işlev parametresi olarak veriliyor. Buradaki "ipinfo.io/" get()'e verilecek; get("ipinfo.io/") çağrılacak ve onun sonucu parseJSON()'a geçirilecek.

Anlaşılan, aralıkların zincirleme çağrılmalarına çok benziyor ama aralık algoritmaları ile değil, sıradan işlevlerle işliyor. Yararı ve farkı o. :)

Ali

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