Saya sering menemukan diri saya menulis fungsi yang terlihat seperti ini karena memungkinkan saya untuk dengan mudah mengejek akses data, dan masih memberikan tanda tangan yang menerima parameter untuk menentukan data apa yang akan diakses.
public static string GetFormattedRate(
Func<string, RateType>> getRate,
string rateKey)
{
var rate = getRate(rateKey);
var formattedRate = rate.DollarsPerMonth.ToString("C0");
return formattedRate;
}
Atau
public static string GetFormattedRate(
Func<RateType, string> formatRate,
Func<string, RateType>> getRate,
string rateKey)
{
var rate = getRate(rateKey);
var formattedRate = formatRate(rate);
return formattedRate;
}
Maka saya menggunakannya sesuatu seperti ini:
using FormatterModule;
public static Main()
{
var getRate = GetRateFunc(connectionStr);
var formattedRate = GetFormattedRate(getRate, rateType);
// or alternatively
var formattedRate = GetFormattedRate(getRate, FormatterModule.FormatRate, rateKey);
System.PrintLn(formattedRate);
}
Apakah ini praktik umum? Saya merasa harus melakukan sesuatu yang lebih seperti
public static string GetFormattedRate(
Func<RateType> getRate())
{
var rate = getRate();
return rate.DollarsPerMonth.ToString("C0");
}
Tapi itu sepertinya tidak berfungsi dengan baik karena saya harus membuat fungsi baru untuk masuk ke metode untuk setiap jenis tingkat.
Terkadang saya merasa harus melakukan sesuatu
public static string GetFormattedRate(RateType rate)
{
return rate.DollarsPerMonth.ToString("C0");
}
Tapi itu tampaknya mengambil pengambilan dan memformat penggunaan kembali. Setiap kali saya ingin mengambil dan memformat saya harus menulis dua baris, satu untuk mengambil dan satu untuk memformat.
Apa yang saya lewatkan tentang pemrograman fungsional? Apakah ini cara yang tepat untuk melakukannya, atau apakah ada pola yang lebih baik yang mudah dipelihara dan digunakan?
GetFormattedRate()
menerima laju untuk memformat sebagai parameter, sebagai lawan dari itu menerima fungsi yang mengembalikan laju untuk memformat sebagai parameter?
closures
tempat Anda melewatkan parameter itu sendiri ke suatu fungsi, yang sebaliknya memberi Anda fungsi yang merujuk ke parameter khusus itu. Fungsi "yang dikonfigurasi" ini akan diteruskan sebagai parameter ke fungsi, yang menggunakannya.