उच्च आदेश कार्यों के लिए नामकरण सम्मेलन? [बन्द है]


15

क्या उच्च आदेश कार्यों के लिए एक नामकरण सम्मेलन है? अर्थात्, ऐसे कार्य जो अन्य कार्यों को वापस करते हैं।

जावास्क्रिप्ट में एक उदाहरण:

function onlyDivisibleBy(div) { // <-- higher order function
  return function (n) {
    return n % div === 0;
  }
}

var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

arr.filter(onlyDivisibleBy(3)); // [0, 3, 6, 9]
arr.filter(onlyDivisibleBy(5)); // [0, 5]

मैंने इसे ऊपर के रूप में लिखने का प्रयास किया है: यानी, आह्वान बिंदु पर सुगमता के लिए अनुकूलन करना (मैंने ऊपर की अंतिम पंक्तियां पढ़ी हैं "" केवल 5 से विभाज्य आइटम प्राप्त करने के लिए सरणी फ़िल्टर करें "), हालांकि परिभाषा बिंदु पर दूर जिस संदर्भ में इसका उपयोग किया गया है, यह समझना इतना आसान नहीं है कि यह फ़ंक्शन अपने नाम से क्या करता है।


4
यह आश्चर्य की बात है, मैं हमेशा "उच्च क्रम फ़ंक्शन" शब्द को एक फ़ंक्शन का मतलब समझ सकता हूं जिसने एक तर्क के रूप में दूसरे फ़ंक्शन को स्वीकार किया है। मैं यह नहीं कह रहा हूँ कि आप गलत हैं, मुझे सिर्फ हमारी समझ में अंतर दिलचस्प लगता है।
रचेत

6
@ रैकेट फ़ंक्शंस, जो फ़ंक्शंस लौटाते हैं, वे भी उच्च क्रम हैं। वे दोनों कर सकते हैं।
इसका कर्क

3
@Racheet एक अच्छा बिंदु है और इस उदाहरण के लिए काफी प्रासंगिक है: ओपी वास्तव में क्या लागू कर रहा है आंशिक अनुप्रयोग है। कई (सभी सुनिश्चित नहीं हैं) का उपयोग करता है जहां कार्यों को वापस लौटाया जाता है बजाय आंशिक आवेदन के रूप में देखा जा सकता है। @ nickf: यहाँ अपने उदाहरण को लागू करने के लिए एक क्लीनर तरीका है

जवाबों:


14

नहीं, मुझे नहीं लगता कि आपको यह बताने के लिए एक विशेष नामकरण सम्मेलन की आवश्यकता है कि आप एक फ़ंक्शन वापस कर रहे हैं। जैसा कि हम उन भाषाओं से देख सकते हैं, जहाँ फ़ंक्शंस पर अंकुश लगाया जाता है , एक फ़ंक्शन वापस करना अनिवार्य रूप से एक ही है जिसमें कई तर्कों के साथ एक फ़ंक्शन होता है। उदाहरण के लिए onlyDivisibleBy(3)(6)और के बीच थोड़ा अंतर हैonlyDivisibleBy(3,6)

मैं नाम बदलूंगा onlyDivisibleBy, isDivisibleByहालांकि मुझे लगता isहै कि एक विधेय को इंगित करने के लिए एक अधिक सामान्य तरीका है और दिए गए onlyDivisibleBy(3)(6)रिटर्न के लिए अजीब लगता है trueकि 6 स्पष्ट रूप से 2 से विभाज्य है


5

दृढ़ता से टाइप की गई कार्यात्मक भाषाओं में, यह फ़ंक्शन हस्ताक्षर से स्पष्ट है कि उच्च-ऑर्डर फ़ंक्शन क्या है और क्या नहीं है, इसलिए बस कोई आवश्यकता नहीं है।

अन्य भाषाओं में, मैं कभी भी इस तरह के नामकरण सम्मेलन में नहीं आया हूं और मैं ऐसा नहीं सोच सकता जो केवल बोझिल न हो। मुझे लगता है कि इस तरह के नामों को ओवरलोड करने के बजाय नामकरण कार्यों पर ध्यान केंद्रित करने के लिए बेहतर है।


4

नहीं, और आपको कोई उपयोग नहीं करना चाहिए।

क्यों?

क्योंकि यह एक तरह का हंगेरियन नोटेशन होगा । विचार बिल्कुल यह है कि उच्च-क्रम वाले कार्यों के लिए दिए गए कार्य केवल एक प्रकार के चर हैं। इसलिए उनके साथ वैसा ही व्यवहार करें।


1
निहितार्थ यह है कि हंगेरियन नोटेशन को हर कीमत पर टाला जाना चाहिए? मैं पढ़ने की सलाह देता हूं कि गलत कोड बनाना गलत है
टिहरीशिव

4
मैंने पढ़ा है कि पहले, और मुझे अभी भी विश्वास है कि
आयु की आयु

@TehShrike आपका लिंक टूट गया है।
corvus_192

1
@ corvus_192 को जोएल के ब्लॉग रिडिजाइन में खो जाना चाहिए था! New url लगता है joelonsoftware.com/2005/05/11/making-wrong-code-look-wrong
TehShrike
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.