Je me retrouve souvent à écrire des fonctions qui ressemblent à ceci parce qu'elles me permettent de simuler facilement l'accès aux données, tout en fournissant une signature qui accepte les paramètres pour déterminer les données auxquelles accéder.
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;
}
Ensuite, je l'utilise quelque chose comme ceci:
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);
}
Est-ce une pratique courante? Je sens que je devrais faire quelque chose de plus
public static string GetFormattedRate(
Func<RateType> getRate())
{
var rate = getRate();
return rate.DollarsPerMonth.ToString("C0");
}
Mais cela ne semble pas très bien fonctionner car je devrais créer une nouvelle fonction pour passer dans la méthode pour chaque type de taux.
Parfois, je sens que je devrais faire
public static string GetFormattedRate(RateType rate)
{
return rate.DollarsPerMonth.ToString("C0");
}
Mais cela semble supprimer toute possibilité de récupération et de formatage. Chaque fois que je veux récupérer et formater, je dois écrire deux lignes, une à récupérer et une à formater.
Qu'est-ce qui me manque dans la programmation fonctionnelle? Est-ce la bonne façon de le faire ou existe-t-il un meilleur modèle à la fois facile à entretenir et à utiliser?
GetFormattedRate()
d'accepter le taux à formater comme paramètre, plutôt que de lui faire accepter une fonction qui renvoie le taux à formater comme paramètre?
closures
endroit où vous passez le paramètre lui-même à une fonction, ce qui en retour vous donne une fonction faisant référence à ce paramètre spécical. Cette fonction "configurée" serait passée en paramètre à la fonction qui l'utilise.