Costumo me escrever funções que se parecem com isso, porque elas permitem que eu zombe facilmente do acesso a dados e ainda forneço uma assinatura que aceita parâmetros para determinar quais dados acessar.
public static string GetFormattedRate(
Func<string, RateType>> getRate,
string rateKey)
{
var rate = getRate(rateKey);
var formattedRate = rate.DollarsPerMonth.ToString("C0");
return formattedRate;
}
Ou
public static string GetFormattedRate(
Func<RateType, string> formatRate,
Func<string, RateType>> getRate,
string rateKey)
{
var rate = getRate(rateKey);
var formattedRate = formatRate(rate);
return formattedRate;
}
Então eu uso algo assim:
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);
}
Isto é uma prática comum? Eu sinto que deveria estar fazendo algo mais como
public static string GetFormattedRate(
Func<RateType> getRate())
{
var rate = getRate();
return rate.DollarsPerMonth.ToString("C0");
}
Mas isso não parece funcionar muito bem porque eu teria que criar uma nova função para passar para o método para cada tipo de taxa.
Às vezes eu sinto que deveria estar fazendo
public static string GetFormattedRate(RateType rate)
{
return rate.DollarsPerMonth.ToString("C0");
}
Mas isso parece remover qualquer busca e formato reutilizáveis. Sempre que quero buscar e formatar, tenho que escrever duas linhas, uma para buscar e outra para formatar.
O que sinto falta na programação funcional? É o caminho certo para fazê-lo ou existe um padrão melhor, fácil de manter e usar?
GetFormattedRate()
aceitar a taxa para formatar como parâmetro, em vez de aceitar uma função que retorna a taxa para formatar como parâmetro?
closures
onde você passa o próprio parâmetro para uma função, o que, por sua vez, fornece uma função referente a esse parâmetro específico. Essa função "configurada" seria passada como parâmetro para a função que a utiliza.