Mi ritrovo spesso a scrivere funzioni simili a queste perché mi consentono di deridere facilmente l'accesso ai dati e forniscono comunque una firma che accetta i parametri per determinare a quali dati accedere.
public static string GetFormattedRate(
Func<string, RateType>> getRate,
string rateKey)
{
var rate = getRate(rateKey);
var formattedRate = rate.DollarsPerMonth.ToString("C0");
return formattedRate;
}
O
public static string GetFormattedRate(
Func<RateType, string> formatRate,
Func<string, RateType>> getRate,
string rateKey)
{
var rate = getRate(rateKey);
var formattedRate = formatRate(rate);
return formattedRate;
}
Quindi lo uso in questo modo:
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);
}
È una pratica comune? Sento che dovrei fare qualcosa di più simile
public static string GetFormattedRate(
Func<RateType> getRate())
{
var rate = getRate();
return rate.DollarsPerMonth.ToString("C0");
}
Ma questo non sembra funzionare molto bene perché dovrei creare una nuova funzione per passare al metodo per ogni tipo di tariffa.
A volte mi sento come se dovessi farlo
public static string GetFormattedRate(RateType rate)
{
return rate.DollarsPerMonth.ToString("C0");
}
Ma questo sembra togliere qualsiasi riutilizzo e formattazione. Ogni volta che voglio recuperare e formattare devo scrivere due righe, una per recuperare e una per formattare.
Cosa mi manca della programmazione funzionale? È questo il modo giusto di farlo o esiste un modello migliore che sia facile da mantenere e da usare?
GetFormattedRate()
accettare la tariffa da formattare come parametro, invece di farla accettare una funzione che restituisce la velocità da formattare come parametro?
closures
cui si passa il parametro stesso a una funzione, che a sua volta fornisce una funzione che si riferisce a quel parametro specifico. Questa funzione "configurata" verrebbe passata come parametro alla funzione, che la utilizza.