मैं अक्सर अपने आप को लिखने के कार्य करता हूं जो इस तरह दिखता है क्योंकि वे मुझे आसानी से डेटा एक्सेस का मखौल उड़ाने की अनुमति देते हैं, और फिर भी एक हस्ताक्षर प्रदान करते हैं जो मापदंडों को स्वीकार करता है कि क्या डेटा का उपयोग करना है।
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
जहां आप एक फ़ंक्शन के लिए पैरामीटर को स्वयं पास करते हैं, जो बदले में आपको उस विशिष्ट पैरामीटर के संदर्भ में एक फ़ंक्शन देता है। यह "कॉन्फ़िगर" फ़ंक्शन फ़ंक्शन के पैरामीटर के रूप में पारित किया जाएगा, जो इसका उपयोग करता है।