ऑब्जेक्ट ओरिएंटेड लैंग्वेजेज में चेंज करने का तरीका करी से थोड़ा अलग है। द्वारा परिभाषा , currying का परिणाम मूल की एक और अधिक सीमित रूप है समारोह । कन्वेंशन द्वारा , विधि चिनिंग का परिणाम मूल (आमतौर पर गैर-फ़ंक्शन) ऑब्जेक्ट का एक संशोधित रूप है । विधि जंजीर का उपयोग एक ही वर्ग पर असंबंधित विधियों के साथ किया जा सकता है, जबकि क्यूरिंग में एक फ़ंक्शन वापस करना शामिल होता है जहां मूल फ़ंक्शन के एक या अधिक पैरामीटर तय होते हैं (पूर्व निर्धारित)।
Java में मेथड चेनिंग इस प्रकार है:
String myString = new StringBuilder("Hi ").append(firstName)
.append(" ")
.append(lastName)
.append("!")
.toString();
तो, उनमें से प्रत्येक .append () विधि कॉल अनाम StringBuilder ऑब्जेक्ट के लिए एक पॉइंटर लौटाता है। यह ऑब्जेक्ट प्रत्येक .append () के बाद पूरा होता है, और यह एक फ़ंक्शन नहीं है।
इसके विपरीत, स्काला में, आंशिक अनुप्रयोग या करीकरण निम्नानुसार है:
def simple(x:Int, y:Int, z:Int) = x * (y + z)
val simpler = simple(2, _:Int, _:Int)
simpler(3, 4) => 14
( डैनियल यांकोव्स्की के ब्लॉग से लिया गया नमूना )
simpler()
इस उदाहरण में के लिए एक आवरण समारोह है simple()
। simpler()
अभी भी एक ऐसा कार्य है जो किसी भी चीज़ का मूल्यांकन करने से पहले अधिक मापदंडों को लेता है लेकिन स्वयं का एक अधिक सीमित संस्करण।
संपादित करें: एक दिन बाद इसे पढ़ना, मुझे लगता है कि "रैपर-फंक्शन" प्रमुख है। करी या आंशिक अनुप्रयोग को रैपर तरीकों से जावा में सर्वोत्तम रूप से अनुकरण किया जा सकता है।
public interface Simpler {
public int apply(int y, int z);
}
public class Simple {
public int apply(int x, int y, int z) { return x * (y + z); }
public Simpler partiallyApply(final int x) {
final simple = this;
return new Simpler() {
@Override
public int apply(int y, int z) {
// x is the final int parameter to partiallyApply()
simple.apply(x, y, z);
}
}
}
}
: अंत संपादित करें
विधि जंजीर आंशिक अनुप्रयोग या करी के समान हो सकता है, लेकिन यह केवल उन विधियों के बराबर हो सकता है जो अन्य विधियों (फ़नसर्स को देखें) को वापस करते हैं, और फिर विधियों को वापसी प्रकारों के साथ सेट करने की आवश्यकता होती है जो सार्थक रूप से मॉडल करी या आंशिक अनुप्रयोग के साथ सेट होते हैं।
विधि का उपयोग अधिक बार आलसी मूल्यांकन जैसे कुछ को लागू करने के लिए किया जाता है, जैसा कि "बिल्डर" डिजाइन पैटर्न और जावा 8 में नए कलेक्शंस लाइब्रेरी इंटरफेस के साथ किया जाता है ।
मुझे आशा है कि वह मदद करेंगे।