नेस्टेड टिप्पणियों की समस्या को कैसे हल करें


23

यह न केवल एक भाषा में प्रकट होता है, जिसमें टिप्पणियों को नेस्टेड नहीं किया जा सकता है। क्या आपके पास इस समस्या का एक अच्छा समाधान है? C / C ++ और Java में एक वर्कअराउंड केवल सिंगल-लाइन टिप्पणी का उपयोग करना है, लेकिन यह तब असंभव हो जाता है जब एक बड़ा ब्लॉक टिप्पणी करता है। मैं कुछ इस तरह का सामना कर रहा हूँ:

</li><!--
                <li><!-- Save -->

इसलिए मुझे मैन्युअल रूप से टिप्पणियों को संपादित करना होगा। क्या आप सलाह दे सकते हैं कि हमें इसे कैसे संभालना चाहिए, कई भाषाओं में? मुझे यकीन नहीं है, लेकिन शायद अजगर के पास इसके लिए एक समाधान है '''जिस तरह #से अजगर में एक टिप्पणी शामिल करने में सक्षम हो सकता है ? `


4
मुझे लगता है कि केवल संपादक ही आपकी मदद कर सकते हैं। हालांकि, IDLE Python IIRC पर आपके लिए टिप्पणी ब्लॉक कर देगा।
एरिक रिपेन

7
पायथन में ब्लॉक टिप्पणी नहीं है'''और """कर रहे हैं स्ट्रिंग शाब्दिक । ऐसा होता है कि दुभाषिया संकलन (बाइटकोड) के दौरान उनका मूल्यांकन करेगा और स्ट्रिंग शाब्दिकों को नो-ऑप्स के रूप में मान्यता देगा (इसलिए वे बाइटकोड निष्पादन / लोडिंग समय को धीमा नहीं करते हैं)। Docstrings, यानी स्ट्रिंग शाब्दिक defशरीर के ठीक पहले, लेकिन दुभाषिया को दूर नहीं किया जाता है क्योंकि दुभाषिया मानता है कि वे फ़ंक्शन के लिए दस्तावेज प्रदान करते हैं।
बकुरीउ

7
C / C ++ में यदि आप बड़े #if 0कोड को हटाना चाहते हैं तो आप <code> का उपयोग करें #endif। तो यह वास्तव में एक मुद्दा नहीं है। यह करने के लिए टिप्पणियों का उपयोग करना गलत उपकरण है।
मार्टिन यॉर्क

1
मैंने बहुत समय पहले केवल लाइन टिप्पणियों का उपयोग करने के लिए स्विच किया था (जब तक कि मैं मजबूर नहीं हूं, उदाहरण के लिए जेवाडॉक)। बेशक, आपको संपादक समर्थन (या कम से कम स्तंभ मोड) की आवश्यकता है।
जिग्गीस्टार

जवाबों:


46

सबसे अच्छा समाधान है, जाहिर है, सिर्फ अपनी टिप्पणियों को घोंसला करने के लिए नहीं। नेस्टेड टिप्पणियां आमतौर पर एक संकेत है कि आप टिप्पणियों का गलत उपयोग कर रहे हैं। सबसे आम उदाहरण टिप्पणी-आउट कोड है जिसमें स्वयं टिप्पणियां होती हैं, और ठीक यह है कि कोड को टिप्पणी करने के बजाय हटा दिया जाए।

उस ने कहा, कई प्रोग्रामिंग भाषाओं में एक से अधिक प्रकार के टिप्पणी वाक्यविन्यास हैं, और आप इस तथ्य का उपयोग कम से कम एक स्तर गहरा घोंसला करने के लिए कर सकते हैं। उदाहरण के लिए, जावा में:

/* This is commented out!
Foo.bar.baz();
// And now for something completely different...
Quux.runWith(theMoney);
*/

साथ ही, कई भाषाओं में, कम से कम एक प्रकार की टिप्पणी तरह-तरह की होती है; सी जैसी भाषाओं में, लाइन टिप्पणियों के अंदर लाइन टिप्पणियों को अनदेखा किया जाता है:

// some_commented_out(code);
// // This is a comment inside the comment!
// // Still inside the nested comment.
// some_more_code_in(outer_comment);

अधिकांश IDE एक कार्रवाई में लाइन टिप्पणियों के साथ कोड के पूरे ब्लॉकों पर टिप्पणी करने का समर्थन करते हैं, और वे इस तरह की टिप्पणी शैली को सही ढंग से संभालते हैं। पायथन में एक ही उदाहरण:

# some_commented_out(code)
# # This is a comment inside the comment!
# # Still inside the nested comment.
# some_more_code_in(outer_comment)

अक्सर, किसी विशेष परियोजना के लिए कोडिंग मानकों के बारे में नियम होते हैं कि किस शैली का उपयोग कब करना है; एक आम सम्मेलन /* */विधि और वर्ग प्रलेखन के लिए ब्लॉक टिप्पणियों ( ) और इनलाइन टिप्पणियों ( //) के लिए विधि निकायों और इस तरह के अंदर का उपयोग करने के लिए है, जैसे:

/**
 * Helper class to store Foo objects inside a bar.
 */
public class Foobar {
    /**
     * Stores a Foo in this Foobar's bar, unless the bar already contains
     * an equivalent Foo.
     * Returns the number of Foos added (always 0 or 1).
     */
    public int storeFoo(Foo foo) {
        // Don't add a foo we already have!
        if (this.bar.contains(foo)) {
            return 0;
        }
        // OK, we don't have this foo yet, so we'll add it.
        this.bar.append(foo);
        return 1;
    }
}

इस तरह की शैली के साथ, यह संभावना नहीं है कि आपको कभी-कभी /* */टिप्पणी करने की आवश्यकता होगी (यदि आपको अस्थायी रूप से संपूर्ण विधियों या कक्षाओं को अक्षम करना है, तो उन्हें केवल अच्छी तरह से काम नहीं करना चाहिए, यदि बेहतर नहीं है); और //टिप्पणियां करना अपने आईडीई की थोड़ी सी सहायता के साथ कम से कम, घोंसला।

अंत में, कोड को निष्क्रिय करने के लिए, आपके पास कई प्रोग्रामिंग भाषाओं में अन्य विकल्प हैं; उदाहरण के लिए, C में, आप प्रीप्रोसेसर का लाभ उठा सकते हैं:

this_is(activated);
#if 0
this_is(!activated);
/* Comments inside this block don't really nest, they are simply removed
   along with the rest of the block! */
#endif

डायनेमिक भाषाओं में, आप अक्सर ifइसके बजाय नियमित बयानों का उपयोग कर सकते हैं :

<?php

if (0) {
   // This should never run... 
   some_stuff_that_should_never_run();
}

हालाँकि, CPP उदाहरण के विपरीत, इस रणनीति के लिए स्रोत फ़ाइल की आवश्यकता होती है, क्योंकि यह पूरी तरह से वाक्यविन्यास रूप से मान्य है, इसलिए यह उतना लचीला नहीं है।

और अंत में, कम से कम कुछ भाषाएँ हैं जो नेस्टेड टिप्पणियों के लिए अनुमति देती हैं। मामले में आप रुचि रखते हैं, विकिपीडिया का एक अच्छा तुलना चार्ट है


2
SQL के कुछ प्रकार के नेस्टेड टिप्पणियों की अनुमति देता है?
जेवियर कॉम्बेल

3
+1 के लिए// And now for something completely different...
वोरैक

1
@Vorac: आपको संदर्भ पसंद है: D
tdammers

18

C और C ++ में एक नेस्टेड ब्लॉक टिप्पणी है:

#if 0
#endif

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

कई अन्य भाषाओं में आपको संपादक के समर्थन पर भरोसा करना होगा। उन भाषाओं के लिए जिनमें केवल लाइन-आधारित टिप्पणियां हैं (perl, python, ruby, shell ...) यह एक सीमा में सभी लाइनों के लिए टिप्पणी चरित्र को प्रस्तुत करने के लिए सरल है, इसलिए अधिकांश संपादक ऐसा कर सकते हैं। आप अभी भी बता सकते हैं कि पूरे ब्लॉक पर टिप्पणी करने से पहले क्या टिप्पणी की गई थी क्योंकि टिप्पणी का चरित्र दोगुना है - बस इसे यहां करना लाभ है।

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


2
उन प्रीप्रोसेसर निर्देशों का वास्तविक टिप्पणियों के रूप में उपयोग करने के बारे में कभी नहीं सोचा। दिलचस्प है, सी # के लिए भी, लेकिन उस मामले में, आपको कुछ ऐसा करना होगा, #if _जो अच्छा काम करे और मेरे वीएस में री # के साथ बाहर हो जाए। अच्छी टिप!
डेसपेयर

2

सामान्य समाधान नहीं है, और निश्चित रूप से आदर्श नहीं है, लेकिन इस विशेष समस्या से निपटने का एक तरीका यह है कि नेस्टेड कोड कमेंट तत्वों के लिए ब्लॉक कमेंट्स करने के लिए सर्वर साइड टेम्पलेट प्रोसेसिंग लैंग्वेज का उपयोग किया जाए। यह आवश्यक रूप से सामग्री को बरकरार रखता है, लेकिन इसे क्लाइंट ब्राउज़र को भेजने से रोकता है।

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



0

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

/* This is the start of the first multiline comment.
 /* This is the second, nested multiline comment. */
 This is the end of the first multiline comment. */

स्विफ्ट प्रोग्रामिंग लैंग्वेज: द बेसिक्स


0

डी प्रोग्रामिंग लैंग्वेज में नेस्टेड कमेंट्स हैं:

/+ This is a nested comment 
  /+ This is part of that a comment +/
  /* So is this */
+/
/+ /* This is another nested comment */ +/
/* /* This is not a nested comment */

दूसरे शब्दों में, /+और +/टिप्पणी घोंसला।

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