ऑफ-साइड नियम: Difference between revisions

From Vigyanwiki
Line 59: Line 59:
[[लिस्प (प्रोग्रामिंग भाषा)|लिस्प]] और अन्य [[एस-अभिव्यक्ति]]-आधारित भाषाएं कथनों को अभिव्यक्तियों से अलग नहीं करती हैं, और कोष्ठक भाषा के भीतर सभी कथनों के सीमा को नियंत्रित करने के लिए पर्याप्त हैं। घुंघराले कोष्ठक भाषाओं की तरह, रिक्त स्थान को अधिकतर पाठक द्वारा अनदेखा कर दिया जाता है। व्हाईटस्पेस का उपयोग टोकन को अलग करने के लिए किया जाता है।<ref>{{Cite web|url=http://clhs.lisp.se/Body/02_adg.htm|title = CLHS: Section 2.1.4.7}}</ref> लिस्प कोड की स्पष्ट संरचना मानव पाठकों के लिए एक दृश्य संकेत बनाने के लिए स्वचालित इंडेंटिंग की अनुमति देती है।
[[लिस्प (प्रोग्रामिंग भाषा)|लिस्प]] और अन्य [[एस-अभिव्यक्ति]]-आधारित भाषाएं कथनों को अभिव्यक्तियों से अलग नहीं करती हैं, और कोष्ठक भाषा के भीतर सभी कथनों के सीमा को नियंत्रित करने के लिए पर्याप्त हैं। घुंघराले कोष्ठक भाषाओं की तरह, रिक्त स्थान को अधिकतर पाठक द्वारा अनदेखा कर दिया जाता है। व्हाईटस्पेस का उपयोग टोकन को अलग करने के लिए किया जाता है।<ref>{{Cite web|url=http://clhs.lisp.se/Body/02_adg.htm|title = CLHS: Section 2.1.4.7}}</ref> लिस्प कोड की स्पष्ट संरचना मानव पाठकों के लिए एक दृश्य संकेत बनाने के लिए स्वचालित इंडेंटिंग की अनुमति देती है।


एक और विकल्प है कि प्रत्येक ब्लॉक निर्दिष्ट कीवर्ड के साथ शुरू हो और समाप्त हो। उदाहरण के लिए, [[ALGOL 60]] और उसके उत्पन्न [[Pascal (programming language)|Pascal]] में, ब्लॉक की शुरुआत [[Reserved word|कीवर्ड]] <code>begin</code> से होती है और कीवर्ड <code>end</code> से समाप्त होती है। कुछ भाषाओं में (लेकिन पैस्कल में नहीं), इसका मतलब है कि न्यूलाइन ''महत्वपूर्ण होते हैं'' (कर्ली ब्रेस भाषाओं की तरह) लेकिन इंडेंटेशन नहीं होती। [[BASIC]] और [[Fortran]] में, ब्लॉक ब्लॉक नाम (जैसे <code>IF</code>) से शुरू होते हैं और ब्लॉक नाम के साथ <code>END</code> प्रतिस्थापित होने से समाप्त होते हैं (जैसे <code>END IF</code>)। [[Fortran]] में, हर एक ब्लॉक का अपना अद्वितीय ब्लॉक नाम हो सकता है, जो लंबे कोड में एक और स्पष्टता स्तर जोड़ता है। [[ALGOL 68]] और [[Bourne shell]] (sh, और [[Bash (Unix shell)|bash]]) समान हैं, लेकिन ब्लॉक का समाप्त होना आमतौर पर ब्लॉक के नाम के उल्टे रूप में दिया जाता है (जैसे <code>case</code> एक [[switch statement]] शुरू करता है और यह मिलाने तक चलता है <code>esac</code>; इसी तरह [[conditional (computer programming)|शर्त]] <code>if</code>...<code>then</code>...[<code>elif</code>...[<code>else</code>...]]<code>fi</code> या [[for loop|''for'' loops]] <code>for</code>...<code>do</code>...<code>od</code> या ALGOL68 में <code>for</code>...<code>do</code>...<code>done</code> बैश में।
कुछ प्रोग्रामिंग भाषाओं में प्रत्येक ब्लॉक की शुरुआत और समाप्ति के लिए स्पष्ट कीवर्ड उपयोग किए जाते हैं। इस तरीके से कोड ब्लॉक की सीमाओं की परिभाषा में स्पष्टता और असंदिग्धता प्रदान करता है। [[ALGOL 60]] और उसके वंशावली [[Pascal (programming language)|पास्कल]] में ब्लॉक <code>begin</code> और "<code>end</code> [[Reserved word|कीवर्ड]] के बीच आते हैं। यह सिन्टेक्स यह सुनिश्चित करता है कि प्रत्येक ब्लॉक का प्रारंभ और समाप्ति स्पष्ट रूप से उल्लिखित होती है। यद्यपि प्रास्कल में इंडेंटेशन महत्वपूर्ण नहीं है, परंतु न्यूलाइन का उपयोग योग्यतात्मक हो सकता है। [[BASIC]]और फोरट्रान में, ब्लॉक का प्रारंभ ब्लॉक के नाम के साथ होती है (जैसे IF) और ब्लॉक के नाम के पहले "<code>end</code>" लगाया जाता है (जैसे "END IF")। [[source code editor|फोरट्रान]] में प्रत्येक एक ब्लॉक का अपना स्वयं का नाम हो सकता है, जो लंबे कोड में और अधिक स्पष्टता जोड़ता है। [[ALGOL 60]] और बोर्न शेल (sh, और [[Bash (Unix shell)|bash]]) में, ब्लॉक की समाप्ति सामान्यतः पलटकर लिखे गए ब्लॉक के नाम द्वारा दी जाती है। उदाहरण के लिए, बोर्न शेल में स्विच कथन <code>case</code>" से प्रारंभ होता है और "<code>esac</code>" तक चलता है। इसी तरह, [[ALGOL 60]] में <code>if</code>...<code>then</code>...[<code>elif</code>...[<code>else</code>...]]<code>fi</code> और बैश में "<code>for</code>...<code>do</code>...<code>od</code>" जैसी शर्ताधारी वाक्यांशों के द्वारा ब्लॉक का प्रारंभ और समाप्ति स्पष्टतः निर्दिष्ट की जाती है। ये स्पष्ट ब्लॉक निर्देशक ब्लॉक कोड को पठनीयता बढ़ाने में सहायक होते हैं और गलतियों के प्रति कम संवेदनशील बनाते हैं। विकाशक आसानी से प्रत्येक ब्लॉक की सीमाओं को पहचान सकते हैं, जो कोड की समझ और रखरखाव में सहायक हो सकते है।


इसका एक रोचक रूप में प्राकृतिक होने वाला वैरिएंट [[Modula-2]] में देखा जाता है, जो एक Pascal जैसी भाषा है जो एक और बहु-लाइन ब्लॉक के बीच का अंतर खत्म कर देती है। इससे एक्सेस करने वाले ब्लॉक के लिए ब्लॉक खोलने वाले टोकन (<code>{</code> या <code>BEGIN</code>) को सभी के लिए छोड़ा जा सकता है, केवल ब्लॉक समाप्त करने वाले टोकन (<code>}</code> या <code>END</code>) की आवश्यकता होती है। इसके अलावा, यह [[dangling else]] को सुधारता है। उपयोग के लिए <code>end</code> टोकन को ब्लॉक के शेष इंडेंट स्तर पर रखना होता है, जो एक ब्लॉक संरचना को बहुत पठनीय बनाता है।
इसका एक रोचक रूप में प्राकृतिक होने वाला रूपांतर [[Modula-2|मॉड्यूल-2]] में देखा जाता है, जो एक पास्कल जैसी भाषा है जो एक और बहु-लाइन ब्लॉक के बीच का अंतर खत्म कर देती है। इससे एक्सेस करने वाले ब्लॉक के लिए ब्लॉक खोलने वाले टोकन (<code>{</code> या <code>BEGIN</code>) को सभी के लिए छोड़ा जा सकता है, केवल ब्लॉक समाप्त करने वाले टोकन (<code>}</code> या <code>END</code>) की आवश्यकता होती है। इसके अतिरिक्त  यह [[dangling else|निलंबित एल्स]] को सुधारता है। उपयोग के लिए <code>end</code> टोकन को ब्लॉक के शेष इंडेंट स्तर पर रखना होता है, जो एक ब्लॉक संरचना को बहुत पठनीय बनाता है।


[[Fortran]] के दृष्टिकोण से एक लाभ यह है कि यह लंबे, नेस्टेड या अन्यथा जटिल कोड की पठनीयता में सुधार करता है। एक आउटडेंट्स या समाप्ति ब्रैकेट्स का समूह केवल सांद्रत्यपूर्ण संकेत उपलब्ध कराता है कि कौन से ब्लॉक बंद हो रहे हैं, जिससे पीछे जाना और [[debugging]] के दौरान अधिक सतर्कता की आवश्यकता होती है। इसके अतिरिक्त, END-जैसे कीवर्ड्स के लिए सफ्फिक्स की अनुमति देने वाली भाषाएं इस तरह की संकेतों को और बेहतर बनाती हैं, जैसे <code>continue</code> बनाम <code>continue for x</code>। हालांकि, आधुनिक [[source code editor]]s अक्सर विजुअल संकेतक, जैसे [[syntax highlighting]], और [[code folding]] जैसी विशेषताएँ प्रदान करते हैं, जो इन दुष्प्रभावों के साथ मदद करते हैं।
[[source code editor|फोरट्रान]] के दृष्टिकोण से एक लाभ यह है कि यह लंबे, नेस्टेड या अन्यथा जटिल कोड की पठनीयता में सुधार करता है। एक आउटडेंट्स या समाप्ति ब्रैकेट्स का समूह केवल सांद्रत्यपूर्ण संकेत उपलब्ध कराता है कि कौन से ब्लॉक बंद हो रहे हैं, जिससे पीछे जाना और [[debugging|निलंबित]] के समय अधिक सतर्कता की आवश्यकता होती है। इसके अतिरिक्त, <code>end</code>-जैसे कीवर्ड्स के लिए सफ्फिक्स की अनुमति देने वाली भाषाएं इस तरह की संकेतों को और बेहतर बनाती हैं, जैसे <code>continue</code> और  <code>continue for x</code>। यद्यपि, आधुनिक स्रोत [[source code editor|कोड संपादक]] प्रायः विजुअल संकेतक, जैसे [[syntax highlighting|हाइलाइटिंग सिंटेक्स]], और [[code folding|कोड फोल्डिंग]] जैसी विशेषताएँ प्रदान करते हैं, जो इन दुष्प्रभावों के साथ मदद करते हैं।


[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:Articles with hatnote templates targeting a nonexistent page]]
Line 77: Line 77:


==उत्पादकता==
==उत्पादकता==
स्काला भाषा (प्रोग्रामिंग भाषा) में, शुरुआती संस्करणों में केवल घुंघराले ब्रेसिज़ की अनुमति थी। स्काला 3 ने संरचना ब्लॉकों में इंडेंटिंग का उपयोग करने के लिए एक विकल्प जोड़ा। डिज़ाइनर मार्टिन ओडरस्की ने कहा कि इससे कुल मिलाकर उत्पादकता में 10% का सुधार होता है, यह स्काला 3 में पेश किया गया सबसे अधिक उत्पादक परिवर्तन साबित होता है, और इसके उपयोग की सलाह देता है।<ref>{{Cite AV media |last=Odersky |first=Martin |date=17 June 2020 |title=Martin Odersky: A Scala 3 Update |medium=video |language=en |url=https://www.youtube.com/watch?v=Z0w_pITUTyU  |archive-url=https://ghostarchive.org/varchive/youtube/20211221/Z0w_pITUTyU |archive-date=2021-12-21 |url-status=live|time=36:35–45:08 |publisher=YouTube |access-date=2021-04-25}}{{cbignore}}</ref>
स्काला भाषा में, प्रारंभिक संस्करणों में कर्वी ब्रेसेज को ही अनुमति दी जाती थी। स्काला 3 ने एक विकल्प जोड़ा है जिससे ब्लॉक को संरचित करने के लिए इंडेंटिंग का उपयोग किया जा सकता है। डिज़ाइनर मार्टिन ओडर्स्की ने कहा है कि इससे कुल में उत्पादकता 10% तक बढ़ जाती है, यह स्काला 3 में प्रस्तुत की गई सबसे उत्पादक बदलाव होता है, और इसके उपयोग की सलाह दी जाती है।
 




Line 91: Line 92:
* [[करी (प्रोग्रामिंग भाषा)]]
* [[करी (प्रोग्रामिंग भाषा)]]
* [[एल्म (प्रोग्रामिंग भाषा)]]
* [[एल्म (प्रोग्रामिंग भाषा)]]
* एफ शार्प (प्रोग्रामिंग भाषा)|एफ# (प्रारंभिक संस्करणों में, जब <code>#light</code> निर्दिष्ट किया जाता है; बाद के संस्करणों में जब <code>#light "off"</code> क्या नहीं है<ref>{{Cite web |url=https://blogs.msdn.microsoft.com/dsyme/2009/05/20/detailed-release-notes-for-the-f-may-2009-ctp-update-and-visual-studio-2010-beta1-releases/ |title=Detailed Release Notes for the F# May 2009 CTP Update and Visual Studio 2010 Beta1 releases |last=Syme |first=Don |archive-url=https://web.archive.org/web/20190121121601/https://blogs.msdn.microsoft.com/dsyme/2009/05/20/detailed-release-notes-for-the-f-may-2009-ctp-update-and-visual-studio-2010-beta1-releases/ |archive-date=2019-01-21}}</ref>)
* F (प्रारंभिक संस्करणों में, जब <code>#light</code> निर्दिष्ट किया जाता है; बाद के संस्करणों में जब <code>#light "off"</code> नहीं होता है<ref>{{Cite web |url=https://blogs.msdn.microsoft.com/dsyme/2009/05/20/detailed-release-notes-for-the-f-may-2009-ctp-update-and-visual-studio-2010-beta1-releases/ |title=Detailed Release Notes for the F# May 2009 CTP Update and Visual Studio 2010 Beta1 releases |last=Syme |first=Don |archive-url=https://web.archive.org/web/20190121121601/https://blogs.msdn.microsoft.com/dsyme/2009/05/20/detailed-release-notes-for-the-f-may-2009-ctp-update-and-visual-studio-2010-beta1-releases/ |archive-date=2019-01-21}}</ref>)
* [[जिन्न (प्रोग्रामिंग भाषा)]]
* [[जिन्न (प्रोग्रामिंग भाषा)]]
* गोडोट_(गेम_इंजन)#जीडीस्क्रिप्ट|जीडीस्क्रिप्ट (गोडोट इंजन)
* जीडीस्क्रिप्ट (गोडोट इंजन)
* [[हास्केल (प्रोग्रामिंग भाषा)]]<ref>[http://haskell.org/onlinereport/lexemes.html#sect2.7 The Haskell Report – Layout]</ref> (केवल <code>where</code>, <code>let</code>, <code>do</code>, या <code>case ... of</code> खंड जब ब्रेसिज़ छोड़े जाते हैं)
* [[हास्केल (प्रोग्रामिंग भाषा)]]<ref>[http://haskell.org/onlinereport/lexemes.html#sect2.7 The Haskell Report – Layout]</ref> (केवल <code>where</code>, <code>let</code>, <code>do</code>, या <code>case ... of</code> खंड जब ब्रेसिज़ छोड़े जाते हैं)
* [[सूचित करें 7]]
* [[सूचित करें 7]]
* [[ISWIM]], वह अमूर्त भाषा जिसने नियम प्रस्तुत किया
* [[ISWIM|आईएसडब्ल्यूआईएम]], वह अमूर्त भाषा जिसने नियम प्रस्तुत किया
* [[लाइवस्क्रिप्ट (प्रोग्रामिंग भाषा)]]
* [[लाइवस्क्रिप्ट (प्रोग्रामिंग भाषा)]]
* [[मिरांडा (प्रोग्रामिंग भाषा)]]
* [[मिरांडा (प्रोग्रामिंग भाषा)]]
Line 106: Line 107:
* पायथन (प्रोग्रामिंग भाषा)
* पायथन (प्रोग्रामिंग भाषा)
* स्काला (प्रोग्रामिंग भाषा), वैकल्पिक मोड
* स्काला (प्रोग्रामिंग भाषा), वैकल्पिक मोड
* [[योजना (प्रोग्रामिंग भाषा)]], कार्यान्वयन के लिए कई योजना अनुरोधों में से एक का उपयोग करते समय, जिनमें से नवीनतम है [http://srfi.schemers.org/srfi-119/srfi-119.html SRFI 119]
* [[योजना (प्रोग्रामिंग भाषा)]], कार्यान्वयन के लिए कई योजना अनुरोधों में से एक का उपयोग करते समय, जिनमें से नवीनतम है
* [[स्पिन (प्रोग्रामिंग भाषा)]]
* [[स्पिन (प्रोग्रामिंग भाषा)]]
*वोमा
*वोमा
Line 113: Line 114:
===अन्य भाषाएँ===
===अन्य भाषाएँ===
* [[ जांघ ]]
* [[ जांघ ]]
* मेक (सॉफ़्टवेयर) (बिल्ड टूल: टैब मेक रूल्स में कमांड पेश करते हैं)
* मेक (सॉफ़्टवेयर)
* [[पुनः संरचित पाठ]]<ref>[http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#id38 reStructuredText Markup Specification – Indentation]</ref>
* [[पुनः संरचित पाठ]]<ref>[http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#id38 reStructuredText Markup Specification – Indentation]</ref>
* [[सैस (स्टाइलशीट भाषा)]]
* [[सैस (स्टाइलशीट भाषा)]]
* [[स्टाइलस (स्टाइलशीट भाषा)]]
* [[स्टाइलस (स्टाइलशीट भाषा)]]
* [[वाईएएमएल]]
* [[वाईएएमएल]]
* पग (पूर्व में जेड), [[वेब टेम्पलेट इंजनों की तुलना]] देखें
* पग (पूर्व में जेड),  


==यह भी देखें==
==यह भी देखें==
*{{format link|Python syntax and semantics#Indentation}}
*{{format link|पायथन सिंटैक्स और शब्दार्थ # इंडेंटेशन}}
*सुन्दरमुद्रण
*प्रिटीप्रिंट


==संदर्भ==
==संदर्भ==

Revision as of 00:58, 18 July 2023

यदि किसी कंप्यूटर प्रोग्रामिंग भाषा में ब्लॉक को उसके इंडेंटेशन द्वारा व्यक्त किया जाता है,[1] तो उस भाषा का सिंटेक्स, ऑफ-साइड नियम का पालन करता है। इस शब्द का प्रयोग पीटर लैंडिन ने संभवतः फ़ुटबॉल के ऑफ़साइड नियम पर विचारशीलता के लिए एक मज़ाक के रूप में किया था। इसके विपरीत, फ्री-फॉर्म भाषाओं, विशेष रूप से कर्ली-कोष्ठक प्रोग्रामिंग भाषाओं के साथ, इंडेंटेशन का कोई गणनात्मक अर्थ नहीं होता है और इंडेंटेशन की शैली केवल कोडिंग संबंधी सामग्री और फॉर्मेटिंग के रूप में संदर्भित होते हैं। साथ ही, ऑफ-साइड-नियम भाषाओं को भी महत्वपूर्ण इंडेंटेशन वाली भाषाओ के रूप में वर्णित किया जाता है।

परिभाषा

पीटर लैंडिन ने अपने 1966 के लेख अगली 700 प्रोग्रामिंग भाषाएँ में ऑफ-साइड नियम को इस प्रकार परिभाषित किया: पिछली पंक्ति पर पहले ऐसे टोकन के बाईं ओर कोई भी गैर-व्हाट्सएप टोकन एक नई घोषणा की शुरुआत मानी जाती है।"[2]


कोड उदाहरण

निम्नलिखित एक पायथन में इंडेंटेशन ब्लॉक का उदाहरण है: कोलन पायथनभाषा की सुविधाओं में से एक हैं जो पठनीयता के लिए होते हैं; वे ऑफ-साइड नियम को लागू करने के लिए आवश्यक नहीं होते।

पायथन में, यह नियम घोषणाओं की सीमाएं परिभाषित करने के अतिरिक्त कथन की सीमाएं परिभाषित करने के लिए लागू होता है।

def is_even(a: int) -> bool:
    """Determine whether number 'a' is even."""
    if a % 2 == 0:
        print('Even!')
        return True
    print('Odd!')
    return False

पायथन कोष्ठक के भीतर ऑफ-साइड नियम को निलंबित करता है। कोष्ठक के भीतर का एक कथन अपने कोष्ठक के मेल करने तक चलता रहता है।

{
    "this": True,
    "that": False,
    "them": [1, 2,
3, 4, 5, 
6, 7, 8,
9, 10, 11, 12]
}

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

कार्यान्वयन

ऑफ-साइड नियम को शाब्दिक विश्लेषण चरण में लागू किया जा सकता है, जैसे Python में, जहां इंडेंटिंग को बढ़ाने पर लेक्सर आउटपुट में एक INDENT टोकन उत्पन्न होता है, और इंडेंटिंग को कम करने पर लेक्सर आउटपुट में एक DEDENT टोकन उत्पन्न होता है।.[3] ये टोकन ब्रेस ब्लॉक के खुलने वाले ब्रेस और बंद होने वाले ब्रेस के समानांतर होते हैं जो भाषाओं में प्रयोग होती हैं और इसका अर्थ है कि वाक्य व्याकरण इस पर निर्भर नहीं करता है कि ब्रेस या इंडेंटेशन का उपयोग किया जाता है। यह आवश्यकता होती है कि लेक्सर स्थानांतरण स्तर को मेमोराइज़ करे, अर्थात् वर्तमान इंडेंट स्तर को संग्रह करे, और इसलिए यह परिवर्तन होने पर इंडेंटेशन में परिवर्तन का पता लगा सकता है, और इस प्रकार औपचारिक व्याकरण वाक्य व्याकरण से मुक्त नहीं होता है INDENT और DEDENT पिछले इंडेंट स्तर की संदर्भिक जानकारी पर निर्भर करता है।

विकल्प

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

लिस्प और अन्य एस-अभिव्यक्ति-आधारित भाषाएं कथनों को अभिव्यक्तियों से अलग नहीं करती हैं, और कोष्ठक भाषा के भीतर सभी कथनों के सीमा को नियंत्रित करने के लिए पर्याप्त हैं। घुंघराले कोष्ठक भाषाओं की तरह, रिक्त स्थान को अधिकतर पाठक द्वारा अनदेखा कर दिया जाता है। व्हाईटस्पेस का उपयोग टोकन को अलग करने के लिए किया जाता है।[4] लिस्प कोड की स्पष्ट संरचना मानव पाठकों के लिए एक दृश्य संकेत बनाने के लिए स्वचालित इंडेंटिंग की अनुमति देती है।

कुछ प्रोग्रामिंग भाषाओं में प्रत्येक ब्लॉक की शुरुआत और समाप्ति के लिए स्पष्ट कीवर्ड उपयोग किए जाते हैं। इस तरीके से कोड ब्लॉक की सीमाओं की परिभाषा में स्पष्टता और असंदिग्धता प्रदान करता है। ALGOL 60 और उसके वंशावली पास्कल में ब्लॉक begin और "end कीवर्ड के बीच आते हैं। यह सिन्टेक्स यह सुनिश्चित करता है कि प्रत्येक ब्लॉक का प्रारंभ और समाप्ति स्पष्ट रूप से उल्लिखित होती है। यद्यपि प्रास्कल में इंडेंटेशन महत्वपूर्ण नहीं है, परंतु न्यूलाइन का उपयोग योग्यतात्मक हो सकता है। BASICऔर फोरट्रान में, ब्लॉक का प्रारंभ ब्लॉक के नाम के साथ होती है (जैसे IF) और ब्लॉक के नाम के पहले "end" लगाया जाता है (जैसे "END IF")। फोरट्रान में प्रत्येक एक ब्लॉक का अपना स्वयं का नाम हो सकता है, जो लंबे कोड में और अधिक स्पष्टता जोड़ता है। ALGOL 60 और बोर्न शेल (sh, और bash) में, ब्लॉक की समाप्ति सामान्यतः पलटकर लिखे गए ब्लॉक के नाम द्वारा दी जाती है। उदाहरण के लिए, बोर्न शेल में स्विच कथन case" से प्रारंभ होता है और "esac" तक चलता है। इसी तरह, ALGOL 60 में if...then...[elif...[else...]]fi और बैश में "for...do...od" जैसी शर्ताधारी वाक्यांशों के द्वारा ब्लॉक का प्रारंभ और समाप्ति स्पष्टतः निर्दिष्ट की जाती है। ये स्पष्ट ब्लॉक निर्देशक ब्लॉक कोड को पठनीयता बढ़ाने में सहायक होते हैं और गलतियों के प्रति कम संवेदनशील बनाते हैं। विकाशक आसानी से प्रत्येक ब्लॉक की सीमाओं को पहचान सकते हैं, जो कोड की समझ और रखरखाव में सहायक हो सकते है।

इसका एक रोचक रूप में प्राकृतिक होने वाला रूपांतर मॉड्यूल-2 में देखा जाता है, जो एक पास्कल जैसी भाषा है जो एक और बहु-लाइन ब्लॉक के बीच का अंतर खत्म कर देती है। इससे एक्सेस करने वाले ब्लॉक के लिए ब्लॉक खोलने वाले टोकन ({ या BEGIN) को सभी के लिए छोड़ा जा सकता है, केवल ब्लॉक समाप्त करने वाले टोकन (} या END) की आवश्यकता होती है। इसके अतिरिक्त यह निलंबित एल्स को सुधारता है। उपयोग के लिए end टोकन को ब्लॉक के शेष इंडेंट स्तर पर रखना होता है, जो एक ब्लॉक संरचना को बहुत पठनीय बनाता है।

फोरट्रान के दृष्टिकोण से एक लाभ यह है कि यह लंबे, नेस्टेड या अन्यथा जटिल कोड की पठनीयता में सुधार करता है। एक आउटडेंट्स या समाप्ति ब्रैकेट्स का समूह केवल सांद्रत्यपूर्ण संकेत उपलब्ध कराता है कि कौन से ब्लॉक बंद हो रहे हैं, जिससे पीछे जाना और निलंबित के समय अधिक सतर्कता की आवश्यकता होती है। इसके अतिरिक्त, end-जैसे कीवर्ड्स के लिए सफ्फिक्स की अनुमति देने वाली भाषाएं इस तरह की संकेतों को और बेहतर बनाती हैं, जैसे continue और continue for x। यद्यपि, आधुनिक स्रोत कोड संपादक प्रायः विजुअल संकेतक, जैसे हाइलाइटिंग सिंटेक्स, और कोड फोल्डिंग जैसी विशेषताएँ प्रदान करते हैं, जो इन दुष्प्रभावों के साथ मदद करते हैं।

उत्पादकता

स्काला भाषा में, प्रारंभिक संस्करणों में कर्वी ब्रेसेज को ही अनुमति दी जाती थी। स्काला 3 ने एक विकल्प जोड़ा है जिससे ब्लॉक को संरचित करने के लिए इंडेंटिंग का उपयोग किया जा सकता है। डिज़ाइनर मार्टिन ओडर्स्की ने कहा है कि इससे कुल में उत्पादकता 10% तक बढ़ जाती है, यह स्काला 3 में प्रस्तुत की गई सबसे उत्पादक बदलाव होता है, और इसके उपयोग की सलाह दी जाती है।


ऑफ-साइड नियम भाषाएँ

प्रोग्रामिंग भाषाएँ

अन्य भाषाएँ

यह भी देखें

संदर्भ

  1. Hutton, G. (Dec 6, 2012). "Parsing Using Combinators". In Davis, Kei; Hughes, John (eds.). Functional Programming: Proceedings of the 1989 Glasgow Workshop 21–23 August 1989, Fraserburgh, Scotland. Springer Science & Business Media. pp. 362–364. ISBN 9781447131663. Retrieved September 3, 2015.
  2. Landin, P. J. (March 1966). "The next 700 programming languages" (PDF). Communications of the ACM. 9 (3): 157–166. doi:10.1145/365230.365257. S2CID 13409665.
  3. Python Documentation, 2. Lexical analysis: 2.1.8. Indentation
  4. "CLHS: Section 2.1.4.7".
  5. Syme, Don. "Detailed Release Notes for the F# May 2009 CTP Update and Visual Studio 2010 Beta1 releases". Archived from the original on 2019-01-21.
  6. The Haskell Report – Layout
  7. MoonScript, a language that compiles to Lua
  8. MoonScript 0.5.0 – Language Guide
  9. reStructuredText Markup Specification – Indentation