क्या कार्यात्मक भाषाओं में अलग-अलग टिप्पणी करनी चाहिए? [बन्द है]


25

मैं अभी कार्यात्मक प्रोग्रामिंग के साथ शुरू कर रहा हूं और मैं अपने कोड पर टिप्पणी करने के सही तरीके के बारे में सोच रहा हूं।

यह एक छोटे से फ़ंक्शन को कम करने के लिए बेमानी लगता है क्योंकि नाम और हस्ताक्षर पहले से ही आपको वह सब कुछ बता देना चाहिए जो आपको जानना चाहिए। बड़े कार्यों पर टिप्पणी करना भी थोड़ा बेमानी लगता है क्योंकि वे आम तौर पर छोटे आत्म-वर्णनात्मक कार्यों से युक्त होते हैं।

एक कार्यात्मक कार्यक्रम टिप्पणी करने का सही तरीका क्या है? क्या मुझे पुनरावृति प्रोग्रामिंग में उसी दृष्टिकोण का उपयोग करना चाहिए?


7
"चूंकि वे आम तौर पर छोटे आत्म-वर्णनात्मक कार्यों से युक्त होते हैं।" - यह, सिद्धांत रूप में, अनिवार्य भाषाओं में अलग नहीं है। फिर भी यह अक्सर स्पष्ट नहीं होता है कि बड़े फ़ंक्शन आखिर में क्या करेंगे: कोई हमेशा इसे कोड से ही निकाल सकता है, लेकिन अगर आपको एक टिप्पणी पढ़ने की तुलना में काफी अधिक समय लगता है तो आपको एक प्रदान करना चाहिए।
लेफ्टरनैबाउट नोव

2
मैं असहमत हूं। चूँकि फ़ंक्शनल लैंगेज का साइड इफ़ेक्ट नहीं है, इसलिए आपको पता है कि यह आखिर में क्या करेगा, दिए गए हस्ताक्षर के साथ एक वैल्यू
लौटाएँ

8
सभी कार्यात्मक भाषाएं शुद्ध नहीं होती हैं, कुछ का दुष्प्रभाव होता है।
थानोस पापनाथनसॉ

1
लेकिन टिप्पणी करने के लिए आप क्या महसूस करते हैं ... यह
ओवरटेक है

1
क्या आपकी परियोजना में अन्य सदस्य होने का जोखिम है जो कार्यात्मक भाषाओं से परिचित नहीं हैं? उन्हें कुछ अतिरिक्त मदद की आवश्यकता हो सकती है।
जेएफओ

जवाबों:


84

फ़ंक्शन नाम को कहना चाहिए कि आप क्या कर रहे हैं।

कार्यान्वयन आपको बताएगा कि आप इसे कैसे कर रहे हैं।

यह बताने के लिए टिप्पणियों का उपयोग करें कि आप ऐसा क्यों कर रहे हैं।


1
महान जवाब, यह मुझे उन टिप्पणियों के साथ कोड को देखने के लिए मारता है जो बताती हैं कि क्या और कैसे (जो कोड से ही स्पष्ट है) लेकिन मुझे क्यों अनुमान लगाने के लिए छोड़ दिया।
एरिक विल्सन

32
और यह प्रतिमान की परवाह किए बिना सच है
जे.के.

2
यह शायद बिना कहे चला जाता है, लेकिन आपको इस बारे में भी टिप्पणी करनी चाहिए कि इस मामले में क्या और कैसे कोड जटिल या जटिल है और इस तरह के स्पष्टीकरण की आवश्यकता है। बेशक, इस तरह के कोड को शायद वैसे भी टाला जाना चाहिए, लेकिन यह हमेशा संभव नहीं है।
user606723

3
जबकि यह उत्तर बहुत सरल है और सादगी का बहुत मूल्य है, यह पूरी तरह से सच नहीं है। एक फ़ंक्शन नाम अक्सर पर्याप्त विवरण में "क्या" का वर्णन नहीं कर सकता है, इसलिए प्रलेखन अक्सर आवश्यक होता है (जैसे कि किनारे के मामलों का वर्णन करने के लिए)। प्रलेखन अक्सर टिप्पणियों में डाला जाता है।
ल्युसिस्ुबल

2
यकीनन, फ़ंक्शन नाम को यह भी बताना चाहिए कि यह क्यों कर रहा है - जब यह संभव है।
यम मारकोविच

14

इस सवाल में निश्चित रूप से एक बिंदु है, क्योंकि कार्यात्मक कार्यक्रम आमतौर पर अनिवार्य लोगों की तुलना में एक अलग अमूर्त स्तर पर होते हैं।

इस वजह से, प्रलेखन की एक और शैली की आवश्यकता है। पुनरावृत्त कार्यक्रमों में एक टिप्पणी निम्नलिखित कोड की तरह सहायक हो सकती है, क्योंकि बॉयलरप्लेट के पीछे कोड का सार छिपा हुआ है:

// map 'toUpperCase' over 'container' yielding 'result'
Container result = new Container();
for (int i=0; i < container.size(); i++) { 
             result.addToTail(container.atElement(i).toUpperCase());
}

लेकिन यह स्पष्ट रूप से एक कार्यात्मक भाषा में बकवास है:

-- map 'toUpperCase' over 'list'
let result = map toUpperCase list

बेहतर:

-- we need the FooBars in all uppercase for the Frobnitz-Interface
let result = map toUpperCase list

8
दादाजी हमेशा मुझे बताते हैं कि क्यों क्या के बजाय दस्तावेज़ क्यों। इसलिए मैं जरूरी कोड के लिए अंतिम संस्करण का भी उपयोग करूंगा।
साइमन बर्गोट

3
तुम्हारा दादा सही है। मैं बस कुछ विशिष्ट टिप्पणियों को प्रदर्शित करना चाहता था जो कि अनिवार्य दायरे में फिर भी समझ में आता है कि फंतासी में बिल्कुल बेकार हैं।
इंगो

11

हमारे द्वारा किसी फ़ंक्शन को दस्तावेज़ित करने का कारण यह है कि पाठक फ़ंक्शन को नहीं चाहते हैं या फ़ंक्शन को नहीं पढ़ सकते हैं। इस कारण से, किसी को कार्यात्मक भाषाओं में भी बड़े कार्यों का दस्तावेजीकरण करना चाहिए। इससे कोई फर्क नहीं पड़ता कि यह समझना आसान है कि फ़ंक्शन इसके कार्यान्वयन को देखकर क्या करता है।


एक अच्छा बिंदु। खासकर अगर पाठक कुछ संकलित पुस्तकालय का उपयोग कर रहा है और केवल उजागर फ़ंक्शन हस्ताक्षर और उनकी टिप्पणियां देख सकता है। वे आपके कोड के स्व-वर्णनात्मक हिम्मत को कभी नहीं देखेंगे।
FrustratedWithFormsDesigner

3

यदि फ़ंक्शन का नाम और पैरामीटर नाम केवल अनुबंध निर्दिष्ट करने के लिए पर्याप्त नहीं हैं, तो फ़ंक्शन पर टिप्पणी की जानी चाहिए ।

// returns a list of Employees    <-- not necessary
def GetEmployeeList: ...

// returns a list of Employees sorted by last name    <-- necessary
def GetEmployeeList: ...

संक्षेप में, अनुबंध परिभाषित करता है कि फ़ंक्शन क्या अपेक्षा करता है और इसकी क्या गारंटी है। कड़ाई से बोलते हुए, यदि GetEmployeeListकोई छांट दी गई सूची लौटाता है , लेकिन फ़ंक्शन नाम या टिप्पणी में ऐसा नहीं कहता है, तो इस फ़ंक्शन के उपभोक्ता को इस व्यवहार पर भरोसा नहीं करना चाहिए। यह एक अनियोजित कार्यान्वयन विवरण है, और लेखक के GetEmployeeListपास इस व्यवहार को किसी भी समय बदलने की स्वतंत्रता है।


2

टिप्पणी में खुद को एक वैकल्पिक विवरण नहीं होना चाहिए कि कोड क्या करता है (जो कि वास्तव में स्वयं कोड द्वारा व्यक्त किया गया है), बल्कि कोड के लिखे जाने के कारणों का स्पष्टीकरण है।

उन्होंने कहा, मुझे कोई कारण नहीं दिखाई देता कि प्रति कार्यात्मक भाषा में एक टिप्पणी अलग क्यों होनी चाहिए ।


1

मैं अपने सभी कोड का दस्तावेजीकरण करने के लिए एक ही तरीका अपनाता हूं:

  • वर्णनात्मक नामों का उपयोग करें,
  • जटिल तर्क से बचा जा सकता है, तो किसी भी कारण से जटिल तर्क से पहले टिप्पणी जोड़ें,
  • संपूर्ण प्रणाली का अवलोकन लिखें,

यदि नाम और प्रकार हस्ताक्षर आपको यह नहीं बताता है कि फ़ंक्शन क्या करता है, तो आप आमतौर पर गलत कर रहे हैं।


0

25 साल की उम्र में आप चीजों को ज्यादा अच्छे से याद करते हैं। जैसे-जैसे आप बड़े होते जाते हैं और आप विरासत कोड के साथ कई प्रणालियों में शामिल होते जाते हैं (हाँ, आज आप जो कोड लिखते हैं, वह 10-15 वर्षों में विरासत कोड होगा) यदि कोई टिप्पणी है तो यह बहुत उपयोगी हो सकती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.