Я часто опиняюсь як пишу функції, які виглядають так, тому що вони дозволяють мені легко знущатися над доступом до даних, і все ще надаю підпис, який приймає параметри, щоб визначити, до яких даних отримувати доступ.
public static string GetFormattedRate(
Func<string, RateType>> getRate,
string rateKey)
{
var rate = getRate(rateKey);
var formattedRate = rate.DollarsPerMonth.ToString("C0");
return formattedRate;
}
Або
public static string GetFormattedRate(
Func<RateType, string> formatRate,
Func<string, RateType>> getRate,
string rateKey)
{
var rate = getRate(rateKey);
var formattedRate = formatRate(rate);
return formattedRate;
}
Тоді я використовую це приблизно так:
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);
}
Це звичайна практика? Я відчуваю, що мені слід робити щось подібне
public static string GetFormattedRate(
Func<RateType> getRate())
{
var rate = getRate();
return rate.DollarsPerMonth.ToString("C0");
}
Але це, здається, не дуже добре працює, тому що мені доведеться зробити нову функцію, щоб перейти в метод для кожного типу курсу.
Іноді я відчуваю, що мені належить займатися
public static string GetFormattedRate(RateType rate)
{
return rate.DollarsPerMonth.ToString("C0");
}
Але це, здається, забирає будь-яку обробку та повторну зручність використання формату. Щоразу, коли я хочу отримати і форматувати, я повинен написати два рядки, один для отримання та один для форматування.
Що мені не вистачає у функціональному програмуванні? Це правильний спосіб зробити це, чи є кращий зразок, який простий в обслуговуванні та використанні?
GetFormattedRate()
прийняти швидкість у форматі як параметр, на відміну від того, щоб вона прийняла функцію, яка повертає швидкість до формату як параметр?
closures
коли ви передаєте сам параметр функції, що взамін дає вам функцію, що посилається на цей специфічний параметр. Ця "налаштована" функція буде передана як параметр функції, яка її використовує.