क्या ऐसा करने के लिए कोई शब्द है: func1 (func2 (), func3 ());


24

मुझे पता है कि obj.func1().func2()इसे विधि-निर्धारण कहा जाता है, लेकिन इसके लिए तकनीकी शब्द क्या है:

func1(func2(), func3());

जहां किसी फ़ंक्शन का रिटर्न दूसरे के तर्क के रूप में उपयोग किया जाता है।


8
obj.func1().func2() is called method chaining- सुधार: इसे ट्रेन मलबे कहा जाता है।
यम मारकोविच

यह बहुत, बहुत, बहुत मुश्किल लगता है जब तक कि आप पूरी तरह से सुनिश्चित न हों कि obj.func1()सदैव func2()एक फ़ंक्शन के रूप में एक ऑब्जेक्ट देता है।
शादुर

8
@ यम केयर की व्याख्या? यह दूसरों के बीच, धाराप्रवाह इंटरफेस में महान लाभ के लिए नियोजित है। क्या आप कानून के कानून की बात कर रहे हैं? यदि ऐसा है, तो यह उपरोक्त पैटर्न को मना नहीं करता है, और यहां तक ​​कि उन मामलों में भी जहां यह एलओडी के खिलाफ एक अच्छा मामला है।
कोनराड रूडोल्फ

1
विधि श्रृंखलन चीनी के साथ एक शेल्फ पर स्थित है, इस पर कोई उपद्रव करने की आवश्यकता नहीं है।
कोस

1
@ Paulicingsterø मैंने सोचा कि स्टैक ट्रेसिंग का मतलब क्या है।
क्रिस सी

जवाबों:


38

मुझे नहीं लगता कि यह फ़ंक्शन रचना है। फंक्शन रचना का अर्थ है दो या अधिक कार्य करना और उन्हें एक नए कार्य में बदलना, जैसे f . g . hहास्केल। ध्यान दें कि इस बिंदु पर कोई फ़ंक्शन नहीं कहा जाता है।

व्यक्तिगत रूप से, मैं func1(func2(), func3())"नेस्टेड फंक्शन कॉल" जैसे निर्माणों का उल्लेख करूंगा ।


+1, इसे मेरे द्वारा देखे गए सभी प्रोग्रामिंग संदर्भों में "नेस्टेड फंक्शन कॉल" के रूप में जाना जाता है।
इज़्काता

1
+1, इस "फ़ंक्शन रचना" को कॉल करना भ्रामक रूप से गलत है।
जियान १

+1। सब f(g())कर रहा है f()पहले तर्क के लिए एक अभिव्यक्ति के साथ बुला रहा है , और ऐसा होता है फ़ंक्शन कॉल g()एक अभिव्यक्ति के रूप में अर्हता प्राप्त करता है। लेकिन अगर इसके लिए एक नाम होना चाहिए, तो यह उतना ही करीब है जितना इसे मिलता है।
१०:३४ पर ब्लफ़्ल

16

गणित में, इसे फ़ंक्शन रचना कहा जाता है । मुझे नहीं लगता कि मैंने प्रोग्रामिंग पर लागू शब्द सुना है, हालांकि। ऐसा इसलिए हो सकता है क्योंकि उपयोग को कुछ कारणों से बड़े पैमाने पर टाला जाता है। यह फंगस 2 से पहले func3 का मूल्यांकन करने के लिए मुक्त होने के कारण फंक्शन्स के साइड इफेक्ट होने पर यह अजीब तरह की बग का परिचय दे सकता है। यह डिबग करना अधिक कठिन है क्योंकि आप ब्रेकपॉइंट को सेट नहीं कर सकते हैं या मध्यवर्ती परिणाम प्रिंट नहीं कर सकते हैं, और अधिकांश लोग सीधे सादे इसे पढ़ना मुश्किल समझते हैं।


4
इसे कार्यात्मक प्रोग्रामिंग में भी रचना कहा जाता है।
चक

8
मुझे नहीं लगता कि यह "काफी हद तक बचा हुआ" है। IMO यह printf("%d %d\n", strlen(a), strlen(b));मध्यस्थ कोड का उपयोग करने के बजाय कोड लिखने के लिए असामान्य नहीं है ।
user281377

3
मुझे लगता है कि जब फंक्शन के साइड-इफेक्ट्स होते हैं, तो अजीब बग्स का समाधान इससे बचना नहीं है, बल्कि इसके बजाय वैल्यू पैदा करने वाले फंक्शन और साइड-इफेक्ट्स वाले लेखन कार्यों से बचना चाहिए। इसी तरह, डिबगर्स के संबंध में, समाधान एक बेहतर डिबगर के लिए पूछना चाहिए, जो आपको डिबगर काम करने के लिए अपना कोड बदलने के लिए मजबूर नहीं करता है।
आर। मार्टिनो फर्नांडिस

7
क्या संकलक मुफ्त func3 से पहले func3 का मूल्यांकन करने के लिए पूरी तरह से इस्तेमाल की जा रही भाषा पर निर्भर करता है। जावा में, उदाहरण के लिए, मूल्यांकन आदेश सख्ती से निर्दिष्ट है। मुझे वास्तव में संदेह होगा कि यह अधिकांश भाषाओं के लिए मामला है।
माइकल बोर्गवर्ड

2
गणित में "फ़ंक्शन रचना" शब्द वास्तव में केवल एकल-तर्क कार्यों पर लागू होता है, जहां यह प्रपत्र की संरचना को संदर्भित करता है func1(func2(func3(x)))। या तकनीकी रूप से, यह के लिए संदर्भित करता कार्यों के लिए खुद को: अगर g(x) = f1(f2(f3(x)))है, तो g( नहीं g(x) ) की रचना है f1, f2और f3। जबकि मैं एक ऐसा तरीका देख सकता था जिसमें आप संरचना को प्रश्न "फ़ंक्शन रचना" कह सकते हैं, यह मुझे गणितीय अर्थ में, शब्द के एक बहुत ही असामान्य उपयोग के रूप में प्रभावित करता है।
डेविड जेड

2

@ कार्ल बेलेफेल्ट पॉइंट के रूप में, इसे मैथ में फंक्शन कंपोजिशन कहा जाता है।

प्रोग्रामिंग में इस चीज के लिए कोई तकनीकी शब्द नहीं है। और मुझे लगता है कि यह एक अच्छी बात है, क्योंकि यह इंगित करता है कि ऑपरेशन सामान्य है और ऑर्थोगोनल है

प्रोग्रामिंग भाषाओं में रूढ़िवादिता का अर्थ है कि आप इसके संदर्भ से स्वतंत्र एक निर्देश / ऑपरेशन का उपयोग कर सकते हैं । उदाहरण के लिए, आप निम्नलिखित सभी तरीकों से किसी फ़ंक्शन / विधि को कॉल कर सकते हैं, और यह समान व्यवहार करेगा ...

f1()(f2(), f3());

x = y + f4();

if ( f5() && !f6() ) doSomething();

f7() = f8() + f9(); // in C++ when a function returns a reference

x = f10() ? f11(f12(f13(x))) : f14();

आप विकिपीडिया पर प्रोग्रामिंग में ऑर्थोगोनलिटी पर अधिक पढ़ सकते हैं , और इस पर स्टैकऑवरफ़्लो पर एक प्रश्न है


यह ऑर्थोगोनलिटी का संकेत नहीं दे रहा है, बल्कि इसके आधार पर है।
राफेल

+1: आप सिर्फ मूल्यों को पारित कर रहे हैं, ओपी के कॉल में कोई जादू नहीं है
वीवीवी

1

मैं वास्तव में शर्तों के साथ उतना अच्छा नहीं हूं, लेकिन मैंने अभी कुछ दिनों पहले एक लेख पढ़ा है जो उच्चतर कार्यों के लिए संदर्भित है , और यहां प्रति विकिपीडिया की परिभाषा का सार है:

http://en.wikipedia.org/wiki/Higher-order_function

गणित और कंप्यूटर विज्ञान में, उच्च-क्रम के कार्य, कार्यात्मक रूप या फ़ंक्शंस ऐसे कार्य हैं जो निम्न में से कम से कम एक करते हैं:

  • इनपुट के रूप में एक या अधिक कार्य करें
  • एक समारोह का उत्पादन

अन्य सभी कार्य प्रथम-क्रम के कार्य हैं। गणित में उच्च-क्रम के कार्यों को ऑपरेटर या कार्यात्मक के रूप में भी जाना जाता है। पथरी में व्युत्पन्न एक सामान्य उदाहरण है, क्योंकि यह एक फ़ंक्शन को दूसरे फ़ंक्शन में मैप करता है।

इसलिए इस मामले में, चूंकि यह परिदृश्य इनपुट / परम के रूप में कम से कम एक फ़ंक्शन लेता है, इसलिए इसे एक उच्च क्रम फ़ंक्शन माना जाएगा, मुझे विश्वास है।


1
नहीं, एक उच्च आदेश फ़ंक्शन को कॉल करना कैसा लगेगा func1(func2, func3)। अनुपस्थित कोष्ठक पर ध्यान दें।
fredoverflow

यह समझ में आता है फ्रेड। एक फ़ंक्शन का पता और दूसरा उस फ़ंक्शन को निष्पादित करने का परिणाम है। यह बात बताने के लिए धन्यवाद।
सिल्वरकोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.