A menudo me encuentro escribiendo funciones que se ven así porque me permiten burlarme fácilmente del acceso a los datos y aún así proporcionar una firma que acepta parámetros para determinar a qué datos acceder.
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;
}
Entonces lo uso algo como esto:
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);
}
¿Es esta una práctica común? Siento que debería estar haciendo algo más como
public static string GetFormattedRate(
Func<RateType> getRate())
{
var rate = getRate();
return rate.DollarsPerMonth.ToString("C0");
}
Pero eso no parece funcionar muy bien porque tendría que hacer una nueva función para pasar al método para cada tipo de tasa.
A veces siento que debería estar haciendo
public static string GetFormattedRate(RateType rate)
{
return rate.DollarsPerMonth.ToString("C0");
}
Pero eso parece eliminar cualquier reutilización de búsqueda y formato. Cada vez que quiero buscar y formatear tengo que escribir dos líneas, una para buscar y otra para formatear.
¿Qué me falta de programación funcional? ¿Es esta la forma correcta de hacerlo, o hay un patrón mejor que sea fácil de mantener y usar?
GetFormattedRate()aceptar la velocidad para formatear como parámetro, en lugar de que acepte una función que devuelve la velocidad para formatear como parámetro?
closuresdonde pasa el parámetro a una función, que a cambio le da una función que se refiere a ese parámetro específico. Esta función "configurada" se pasaría como un parámetro a la función, que la utiliza.