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

From Vigyanwiki
No edit summary
No edit summary
 
(24 intermediate revisions by 4 users not shown)
Line 3: Line 3:
प्रोग्रामिंग भाषा सिंटैक्स सुविधा||ऑफसाइड (बहुविकल्पी)}}
प्रोग्रामिंग भाषा सिंटैक्स सुविधा||ऑफसाइड (बहुविकल्पी)}}


 
एक कंप्यूटर प्रोग्रामिंगलैंग्वेज को सिंटैक्स के '''ऑफ-साइड नियम''' का पालन करने के लिए कहा जाता है यदि, उस लैंग्वेज में ब्लॉक उनके इंडेंटेशन द्वारा व्यक्त किए जाते हैं। संभवतः एसोसिएशन फुटबॉल में ऑफसाइड नियम पर एक वाक्य के रूप में [[पीटर लैंडिन]] द्वारा निर्मित किया गया था, इसकी तुलना फ्री-फॉर्म लैंग्वेजो से की जाती है, विशेष रूप से कर्ली-ब्रैकेट प्रोग्रामिंग लैंग्वेजो में, जहां इंडेंटेशन का कोई कम्प्यूटेशनल अर्थ नहीं होता है, और इंडेंट शैली मात्र कोडिंग कन्वेंशन और फॉर्मेटिंग की स्थिति मे होता है। साथ ही ऑफ-साइड-नियम लैंग्वेजो को भी महत्वपूर्ण इंडेंटेशन के रूप में वर्णित किया जाता है।  
यदि किसी कंप्यूटर [[प्रोग्रामिंग भाषा]] में ब्लॉक को उसके इंडेंटेशन द्वारा व्यक्त किया जाता है<ref name=":0" />, तो कहा जाता है कि उस भाषा का सिंटेक्स '''ऑफ-साइड नियम''' का पालन करता है। इस शब्द का प्रयोग [[पीटर लैंडिन]] ने किया था, जो संभवतः [[फ़ुटबॉल संघ|फ़ुटबॉल]] के ऑफ़साइड नियम पर विचारशीलता के लिए एक मज़ाक के रूप में प्रयोग किया गया।
 
यदि उस भाषा में [[ब्लॉक (प्रोग्रामिंग)]] को उनकी [[इंडेंट शैली]] द्वारा व्यक्त किया जाता है।<ref name=":0">
{{cite conference
| first= G.
| last= Hutton
| editor-first= Kei
| editor-last= Davis
| editor2-first= John
| editor2-last= Hughes
| title= Parsing Using Combinators
| book-title= Functional Programming: Proceedings of the 1989 Glasgow Workshop 21–23 August 1989, Fraserburgh, Scotland
| pages= 362–364
| publisher= Springer Science & Business Media
| date= Dec 6, 2012
| isbn= 9781447131663
| url= https://books.google.com/books?id=GiLjBwAAQBAJ&dq=offside+rule+programming&pg=PA363
| access-date= September 3, 2015}}
</ref><ref>
{{cite conference
| first= D.A.
| last= Turner
| editor-first= Hans Wolfgang
| editor-last= Loidl
| editor2-first= Ricardo
| editor2-last= Peña
| title= Some History of Functional Programming Languages (Invited Talk)
| book-title= Trends in Functional Programming: 13th International Symposium, TFP 2012, St Andrews, UK, June 12–14, 2012, Revised Selected Papers
| pages= 8
| publisher= Springer
| date= August 13, 2013
| isbn= 9783642404474
| url= https://books.google.com/books?id=B_25BQAAQBAJ&dq=Offside+rule+programming&pg=PA8
| access-date= September 3, 2015}}</ref> यह शब्द [[पीटर लैंडिन]] द्वारा गढ़ा गया था, संभवतः [[फ़ुटबॉल संघ]] में ऑफ़साइड (एसोसिएशन फ़ुटबॉल) नियम पर एक वाक्य के रूप में। इसकी तुलना फ्री-फॉर्म भाषाओं से की जाती है, विशेष रूप से घुंघराले-ब्रैकेट प्रोग्रामिंग भाषाओं में, जहां इंडेंटेशन का कोई कम्प्यूटेशनल अर्थ नहीं होता है और इंडेंट शैली केवल कोडिंग सम्मेलनों और स्वरूपण का मामला है। ऑफ-साइड-रूल भाषाओं को भी महत्वपूर्ण इंडेंटेशन के रूप में वर्णित किया गया है।


==परिभाषा==
==परिभाषा==
पीटर लैंडिन ने अपने 1966 के लेख [[अगली 700 प्रोग्रामिंग भाषाएँ]] में ऑफ-साइड नियम को इस प्रकार परिभाषित किया: पिछली पंक्ति पर पहले ऐसे टोकन के बाईं ओर कोई भी गैर-व्हाट्सएप टोकन एक नई घोषणा की शुरुआत के रूप में लिया जाता है।<ref>{{cite journal |last1=Landin |first1=P. J. |author1-link=Peter Landin |date=March 1966 |title=The next 700 programming languages |doi=10.1145/365230.365257 |journal=[[Communications of the ACM]] |volume=9 |issue=3 |pages=157–166 |s2cid=13409665 |url=http://fsl.cs.uiuc.edu/images/e/ef/P157-landin.pdf}}</ref>
<ref>{{cite journal |last1=Landin |first1=P. J. |author1-link=Peter Landin |date=March 1966 |title=The next 700 programming languages |doi=10.1145/365230.365257 |journal=[[Communications of the ACM]] |volume=9 |issue=3 |pages=157–166 |s2cid=13409665 |url=http://fsl.cs.uiuc.edu/images/e/ef/P157-landin.pdf}}</ref>पीटर लैंडिन ने अपने 1966 के लेख "द नेक्स्ट 700 प्रोग्रामिंग लैंग्वेजेज" में ऑफ-साइड नियम को इस प्रकार परिभाषित किया: "पिछली लाइन पर पहले ऐसे टोकन के बाईं ओर कोई भी गैर-व्हाट्सएप टोकन एक नई डिक्लेरेशन का प्रारंभ माना जाता है




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


पायथन में, नियम को घोषणाओं के बजाय बयानों की सीमाओं को परिभाषित करने के लिए लिया जाता है।
पायथन में, नियम को घोषणाओं के अतिरिक्त कथनों की सीमाओं को परिभाषित करने के लिए लिया जाता है।
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
def is_even(a: int) -> bool:
def is_even(a: int) -> bool:
Line 56: Line 22:
     return False
     return False
</syntaxhighlight>
</syntaxhighlight>
पायथन कोष्ठक के भीतर ऑफ-साइड नियम को भी निलंबित करता है। कोष्ठक के भीतर एक कथन तब तक जारी रहता है जब तक उसके कोष्ठक मेल नहीं खाते (या बेमेल):
पायथन कोष्ठक के भीतर ऑफ-साइड नियम को भी निलंबित करता है। ब्रैकेट के भीतर एक कथन तब तक जारी रहता है जब तक कि उसके ब्रैकेट मेल नहीं खाते।
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
{
{
Line 67: Line 33:
}
}
</syntaxhighlight>
</syntaxhighlight>
इस [[सहयोगी सरणी]] में, कुंजियाँ इंडेंट की जाती हैं, और एक सूची चार पंक्तियों के बीच विभाजित होती है।
इस शब्दकोश में, कुंजियाँ इंडेंटेड हैं, और एक सूची चार पंक्तियों के मध्य विभाजित है


==कार्यान्वयन==
==कार्यान्वयन==
ऑफ-साइड नियम को लेक्सिकल विश्लेषण चरण में लागू किया जा सकता है, जैसे कि पायथन (प्रोग्रामिंग भाषा) में, जहां इंडेंटिंग बढ़ाने से लेक्सर आउटपुट होता है <code>INDENT</code> टोकन, और इंडेंटिंग को कम करने से लेक्सर आउटपुट होता है <code>DEDENT</code> टोकन.<ref>[https://docs.python.org/ Python Documentation], [https://docs.python.org/3/reference/lexical_analysis.html 2. Lexical analysis]: [https://docs.python.org/3/reference/lexical_analysis.html#indentation 2.1.8. Indentation]</ref> ये टोकन शुरुआती ब्रेस के अनुरूप हैं <code>{</code> और समापन ब्रेस <code>}</code> उन भाषाओं में जो ब्लॉक के लिए ब्रेसिज़ का उपयोग करते हैं, और इसका मतलब है कि वाक्यांश व्याकरण इस पर निर्भर नहीं करता है कि ब्रेसिज़ या इंडेंटेशन का उपयोग किया जाता है या नहीं। इसके लिए आवश्यक है कि लेक्सर स्थिति, अर्थात् वर्तमान इंडेंट स्तर को बनाए रखे, और इस प्रकार जब यह बदलता है तो इंडेंटेशन में परिवर्तन का पता लगा सकता है, और इस प्रकार लेक्सिकल [[औपचारिक व्याकरण]] संदर्भ-मुक्त व्याकरण नहीं है | संदर्भ-मुक्त: <code>INDENT</code> और <code>DEDENT</code> पूर्व इंडेंट स्तर की प्रासंगिक जानकारी पर निर्भर करें।
ऑफ-साइड नियम को लेक्सिकल विश्लेषण चरण में लागू किया जा सकता है, जैसे कि पायथन में, जहां <code>INDENT</code> टोकन को आउटपुट करने वाले लेक्सर में इंडेंटिंग परिणामों को बढ़ाने और <code>DEDENT</code>टोकन को आउटपुट करने वाले लेक्सर में इंडेंटिंग परिणामों को कम करने का कार्य किया जाता है<ref>[https://docs.python.org/ Python Documentation], [https://docs.python.org/3/reference/lexical_analysis.html 2. Lexical analysis]: [https://docs.python.org/3/reference/lexical_analysis.html#indentation 2.1.8. Indentation]</ref> ये टोकन उन लैंग्वेजओं में प्रारंभिक ब्रेस और समापन ब्रेस के अनुरूप हैं जो ब्लॉक के लिए ब्रैकेट का उपयोग करते हैं, और इसका अर्थ है कि वाक्यांश व्याकरण इस पर निर्भर नहीं करता है कि ब्रेसिज़ या इंडेंटेशन का उपयोग किया जाता है या नहीं इसके लिए आवश्यक है कि लेक्सर स्थिति को बनाए रखे, अर्थात् वर्तमान इंडेंट स्तर, और इस प्रकार जब यह बदलता है तो इंडेंटेशन में परिवर्तन का पता लगा सकता है, और इस प्रकार लेक्सिकल [[औपचारिक व्याकरण|व्याकरण]]: <code>INDENT</code>और <code>DEDENT</code> पूर्व इंडेंट स्तर की प्रासंगिक जानकारी पर निर्भर करते हैं।।


==विकल्प==
==विकल्प==
इंडेंटिंग द्वारा ब्लॉकों को परिसीमित करने का प्राथमिक विकल्प, भाषा [[सी (प्रोग्रामिंग भाषा)]] के व्यापक उपयोग और प्रभाव से लोकप्रिय हुआ, व्हाइटस्पेस वर्णों को अनदेखा करना और स्पष्ट रूप से घुंघराले ब्रैकेट के साथ ब्लॉक को चिह्नित करना है (यानी, <code>{</code> और <code>}</code>) या कोई अन्य सीमांकक। हालांकि यह अधिक स्वरूपण स्वतंत्रता की अनुमति देता है - एक डेवलपर नियंत्रण प्रवाह #अगले पुनरावृत्ति के साथ निरंतरता जैसे कोड के छोटे टुकड़ों को इंडेंट नहीं करने का विकल्प चुन सकता है - लापरवाही से इंडेंट किया गया कोड पाठक को भटका सकता है, जैसे कि [[असफल हो जाओ]] बग।
इंडेंटिंग द्वारा ब्लॉकों को सीमांकित करने का प्राथमिक विकल्प, लैंग्वेज c के व्यापक उपयोग और प्रभाव से लोकप्रिय, व्हाइटस्पेस वर्णों को अनदेखा करना और स्पष्ट रूप से कर्ली ब्रैकेट,i.e., <code>{</code> and <code>}</code> या किसी अन्य सीमांकक के साथ ब्लॉक को चिह्नित करना है।यद्यपि यह अधिक फॉर्मेटिंग फ़्रीडम की अनुमति देता है -एक डेवलपर ब्रेक और कंटिन्यू स्टेटमेंट जैसे कोड के छोटे टुकड़ों को इंडेंट करने का विकल्प चुन सकता है अर्थात अव्यवस्थापूर्वक इंडेंट किया गया कोड पाठक को भटका सकता है, जैसे कि गोटो फेल बग। 
 
[[लिस्प (प्रोग्रामिंग भाषा)|लिस्प]] और अन्य [[एस-अभिव्यक्ति]]-आधारित लैंग्वेज कथनों को अभिव्यक्तियों से अलग नहीं करती हैं, और ब्रैकेट लैंग्वेज के भीतर सभी कथनों के सीमा को नियंत्रित करने के लिए पर्याप्त हैं। कर्ली - ब्रैकेट लैंग्वेजो की तरह, रिक्त स्थान को अधिकतर पाठक द्वारा अनदेखा कर दिया जाता है। व्हाईटस्पेस का उपयोग टोकन को अलग करने के लिए किया जाता है।<ref>{{Cite web|url=http://clhs.lisp.se/Body/02_adg.htm|title = CLHS: Section 2.1.4.7}}</ref> जो लिस्प कोड की स्पष्ट संरचना मानव पाठकों के लिए एक दृश्य संकेत बनाने के लिए स्वचालित इंडेंटिंग की अनुमति देती है। 
 
इंडेंटिंग द्वारा ब्लॉकों को परिसीमित करने का प्राथमिक विकल्प, भाषा सी के व्यापक उपयोग और प्रभाव से लोकप्रिय, व्हाइटस्पेस वर्णों को अनदेखा करना और स्पष्ट रूप से कर्ली ब्रैकेट या किसी अन्य सीमांकक के साथ ब्लॉक को चिह्नित करना है। [[ALGOL 60|एल्गोल 60]] और उसके वंशावली [[Pascal (programming language)|पास्कल]] में ब्लॉक <code>begin</code> और "<code>end</code> [[Reserved word|कीवर्ड]] के मध्य आते हैं। सिन्टेक्स यह सुनिश्चित करता है कि प्रत्येक ब्लॉक का प्रारंभ और समाप्ति स्पष्ट रूप से उल्लिखित होती है। यद्यपि प्रास्कल में इंडेंटेशन महत्वपूर्ण नहीं है, परंतु न्यूलाइन का उपयोग योग्यतात्मक हो सकता है। [[BASIC|बेसिक]] और फोरट्रान में, ब्लॉक का प्रारंभ ब्लॉक के नाम के साथ होती है (जैसे IF) और ब्लॉक के नाम के पहले "<code>end</code>" लगाया जाता है  [[source code editor|फोरट्रान]] में प्रत्येक एक ब्लॉक का अपना स्वयं का नाम हो सकता है, जो लंबे कोड में और अधिक स्पष्टता जोड़ता है। [[ALGOL 60|एल्गोल 60]] और बोर्न शेल, ब्लॉक की समाप्ति सामान्यतः पलटकर लिखे गए ब्लॉक के नाम द्वारा दी जाती है। उदाहरण के लिए, बोर्न शेल में स्विच कथन<code>case</code>" से प्रारंभ होता है और "<code>esac</code>" तक चलता है। इसी प्रकार सशर्त <code>if</code>...<code>then</code>...[<code>elif</code>...[<code>else</code>...]]<code>fi</code> या  लूप्स के लिए  "<code>for</code>...<code>do</code>...<code>od  मे</code>  [[ALGOL 60|एल्गोल 60]] या <code>for</code>...<code>do</code>...done मे  बेश ।
 
इसका एक रोचक संस्करण  [[Modula-2|मॉड्यूल-2]] में होता है, यह एक पास्कल जैसी लैंग्वेज है जो एक और मल्टीलाइन ब्लॉक के मध्य के अंतर को दूर करती है। यह ब्लॉक ओपनर<code>{</code> या <code>BEGIN</code>) को फ़ंक्शन लेवल ब्लॉक के अतिरिक्त सभी के लिए छोड़े जाने की अनुमति देता है, जिसके लिए केवल ब्लॉक समाप्ति टोकन  (<code>}</code> या <code>END</code>) की आवश्यकता होती है। यह अन्य [[dangling else|निलंबित एल्स]] को भी ठीक करता है। कस्टम का उद्देश्य <code>end</code> टोकन को शेष ब्लॉक के समान इंडेंट स्तर पर रखना है, जिससे एक ब्लॉक स्ट्रक्चर मिलता है जो अत्यधिक .रीडेबल होता है।
 
[[source code editor|फोरट्रान]] के दृष्टिकोण से एक लाभ यह है कि यह लंबे, नेस्टेड या अन्यथा कॉम्प्लेक्स कोड की पठनीयता में सुधार करता है। एक आउटडेंट्स या क्लोजिंग ब्रैकेट्स का समूह केवल सांद्रत्यपूर्ण संकेत उपलब्ध कराता है कि प्रासंगिक संकेत कि कौन से ब्लॉक बंद किए जा रहे हैं, डिबगिंग के समय बैकट्रैकिंग और बारीकी से जांच की आवश्यकता है इसके अतिरिक्त, <code>end</code>-जैसे कीवर्ड्स के लिए सफ्फिक्स की अनुमति देने वाली लैंग्वेज एं इस तरह की संकेतों को और बेहतर बनाती हैं, जैसे <code>continue</code> और  <code>continue for x</code>। यद्यपि, आधुनिक स्रोत [[source code editor|कोड संपादक]] प्रायः विजुअल संकेतक, जैसे [[syntax highlighting|हाइलाइटिंग सिंटेक्स]], और [[code folding|कोड फोल्डिंग]] जैसी विशेषताएँ प्रदान करते हैं, जो इन दुष्प्रभावों के साथ मदद करते हैं।
 
 
 
 
 
 
 


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


एक अन्य विकल्प यह है कि प्रत्येक ब्लॉक स्पष्ट कीवर्ड के साथ शुरू और समाप्त हो। उदाहरण के लिए, [[ALGOL 60]] और इसके वंशज [[पास्कल (प्रोग्रामिंग भाषा)]] में, ब्लॉक [[आरक्षित शब्द]] से शुरू होते हैं <code>begin</code> और कीवर्ड के साथ समाप्त करें <code>end</code>. कुछ भाषाओं में (लेकिन पास्कल नहीं), इसका मतलब है कि नई पंक्तियाँ महत्वपूर्ण हैं{{citation needed|date=June 2012}} (घुंघराले ब्रेस भाषाओं के विपरीत), लेकिन इंडेंटेशन नहीं है। [[ बुनियादी ]] और [[फोरट्रान]] में, ब्लॉक ब्लॉक नाम से शुरू होते हैं (जैसे <code>IF</code>) और ब्लॉक नाम के साथ समाप्त करें <code>END</code> (जैसे, <code>END IF</code>). फोरट्रान में, प्रत्येक ब्लॉक का अपना विशिष्ट ब्लॉक नाम भी हो सकता है, जो लंबे कोड में स्पष्टता का एक और स्तर जोड़ता है। [[ALGOL 68]] और [[बॉर्न शैल]] (sh, और [[बैश (यूनिक्स शेल)]]) समान हैं, लेकिन ब्लॉक का अंत आमतौर पर पीछे की ओर लिखे गए ब्लॉक के नाम से दिया जाता है (उदाहरण के लिए, <code>case</code> एक [[ स्विच कथन ]] प्रारंभ करता है और यह मिलान तक फैला रहता है <code>esac</code>; इसी तरह [[सशर्त (कंप्यूटर प्रोग्रामिंग)]] <code>if</code>...<code>then</code>...[<code>elif</code>...[<code>else</code>...<code>fi</code> या लूप के लिए <code>for</code>...<code>do</code>...<code>od</code> ALGOL68 में या <code>for</code>...<code>do</code>...<code>done</code> बैश में)।


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


फोरट्रान दृष्टिकोण का एक फायदा यह है कि यह लंबे, नेस्टेड या अन्यथा जटिल कोड की पठनीयता में सुधार करता है। आउटडेंट्स या क्लोजिंग ब्रैकेट्स का एक समूह अकेले कोई प्रासंगिक संकेत नहीं देता है कि कौन से ब्लॉक बंद किए जा रहे हैं, जिससे [[डिबगिंग]] के दौरान बैकट्रैकिंग और बारीकी से जांच की आवश्यकता होती है। इसके अलावा, जो भाषाएँ END-जैसे कीवर्ड के लिए प्रत्यय की अनुमति देती हैं, वे ऐसे संकेतों को और बेहतर बनाती हैं, जैसे <code>continue</code> बनाम <code>continue for x</code>. हालाँकि, आधुनिक [[स्रोत कोड संपादक]] अक्सर इन कमियों को दूर करने के लिए दृश्य संकेतक, जैसे [[ वाक्य - विन्यास पर प्रकाश डालना ]], और [[ कोड तह ]] जैसी सुविधाएँ प्रदान करते हैं।


==उत्पादकता==
==उत्पादकता==
स्काला भाषा (प्रोग्रामिंग भाषा) में, शुरुआती संस्करणों में केवल घुंघराले ब्रेसिज़ की अनुमति थी। स्काला 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 में प्रस्तुत किया गया सबसे अधिक उत्पादक परिवर्तन प्रमाणित होता है, और इसके उपयोग की सलाह देता है
 




==ऑफ-साइड नियम भाषाएँ==
==ऑफ-साइड नियम लैंग्वेज ==


===प्रोग्रामिंग भाषाएँ===
===प्रोग्रामिंग लैंग्वेज ===
* [[एबीसी (प्रोग्रामिंग भाषा)]]
* [[एबीसी (प्रोग्रामिंग भाषा)|एबीसी]]  
* [[बू (प्रोग्रामिंग भाषा)]]
* [[बू (प्रोग्रामिंग भाषा)|बीओओ]]  
* बडीस्क्रिप्ट
* बडीस्क्रिप्ट
* [[कोबरा (प्रोग्रामिंग भाषा)]]
* [[कोबरा (प्रोग्रामिंग भाषा)|कोबरा]]  
* [[कॉफ़ीस्क्रिप्ट]]
* [[कॉफ़ीस्क्रिप्ट]]
* जुटना
* कन्वर्ज़
* [[करी (प्रोग्रामिंग भाषा)]]
* [[करी (प्रोग्रामिंग भाषा)|करी]]  
* [[एल्म (प्रोग्रामिंग भाषा)]]
* [[Index.php?title=एल्म|एल्म]]  
* एफ शार्प (प्रोग्रामिंग भाषा)|एफ# (प्रारंभिक संस्करणों में, जब <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>)
* एफ (प्रारंभिक संस्करणों में, जब <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|इन्फॉर्म  7]]
* [[ISWIM]], वह अमूर्त भाषा जिसने नियम प्रस्तुत किया
* [[ISWIM|आईएसडब्ल्यूआईएम]], वह अमूर्त लैंग्वेज जिसने नियम प्रस्तुत किया
* [[लाइवस्क्रिप्ट (प्रोग्रामिंग भाषा)]]
* [[लाइवस्क्रिप्ट (प्रोग्रामिंग भाषा)|लाइवस्क्रिप्ट]]  
* [[मिरांडा (प्रोग्रामिंग भाषा)]]
* [[मिरांडा (प्रोग्रामिंग भाषा)|मिरांडा]]  
* मूनस्क्रिप्ट<ref>[https://moonscript.org MoonScript, a language that compiles to Lua]</ref><ref>[https://moonscript.org/reference/#the-language/whitespace MoonScript 0.5.0 – Language Guide]</ref>
* मूनस्क्रिप्ट<ref>[https://moonscript.org MoonScript, a language that compiles to Lua]</ref><ref>[https://moonscript.org/reference/#the-language/whitespace MoonScript 0.5.0 – Language Guide]</ref>
* [[नेमर्ले]], वैकल्पिक मोड
* [[नेमर्ले]], वैकल्पिक मोड
* [[निम (प्रोग्रामिंग भाषा)]]
* [[निम (प्रोग्रामिंग भाषा)|निम]]  
* अवसर (प्रोग्रामिंग भाषा)
* ऑकम
* [[प्रोमल]]
* [[प्रोमल]]
* पायथन (प्रोग्रामिंग भाषा)
* पायथन
* स्काला (प्रोग्रामिंग भाषा), वैकल्पिक मोड
* स्काला, वैकल्पिक मोड
* [[योजना (प्रोग्रामिंग भाषा)]], कार्यान्वयन के लिए कई योजना अनुरोधों में से एक का उपयोग करते समय, जिनमें से नवीनतम है [http://srfi.schemers.org/srfi-119/srfi-119.html SRFI 119]
* [[योजना (प्रोग्रामिंग भाषा)|स्कीम]], कार्यान्वयन के लिए कई योजना अनुरोधों में से एक का उपयोग करते समय, जिनमें से नवीनतम एसआरएफआई 119 है
* [[स्पिन (प्रोग्रामिंग भाषा)]]
* [[स्पिन (प्रोग्रामिंग भाषा)|स्पिन]]  
*वोमा
*वोमा
* [[एक्सएल (प्रोग्रामिंग भाषा)]]
* [[एक्सएल (प्रोग्रामिंग भाषा)|एक्सएल]]  


===अन्य भाषाएँ===
===अन्य लैंग्वेज===
* [[ जांघ ]]
* हम्ल
* मेक (सॉफ़्टवेयर) (बिल्ड टूल: टैब मेक रूल्स में कमांड पेश करते हैं)
* मेक
* [[पुनः संरचित पाठ]]<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|पायथन सिंटैक्स और शब्दार्थ # इंडेंटेशन}}
*सुन्दरमुद्रण
*प्रिटीप्रिंट


==संदर्भ==
==संदर्भ==
{{Reflist}}
{{Reflist}}


{{Types of programming languages}}
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category: प्रोग्रामिंग भाषा विषय]] [[Category: उदाहरण के लिए पायथन (प्रोग्रामिंग भाषा) कोड वाले लेख]]  
[[Category:Collapse templates]]
 
 
 
[[Category: Machine Translated Page]]
[[Category:Created On 11/07/2023]]
[[Category:Created On 11/07/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:उदाहरण के लिए पायथन (प्रोग्रामिंग भाषा) कोड वाले लेख]]
[[Category:प्रोग्रामिंग भाषा विषय]]

Latest revision as of 10:37, 27 July 2023

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

परिभाषा

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


कोड उदाहरण

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

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

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]
}

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

कार्यान्वयन

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

विकल्प

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

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

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

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

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







उत्पादकता

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


ऑफ-साइड नियम लैंग्वेज

प्रोग्रामिंग लैंग्वेज

अन्य लैंग्वेज

यह भी देखें

संदर्भ

  1. 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.
  2. Python Documentation, 2. Lexical analysis: 2.1.8. Indentation
  3. "CLHS: Section 2.1.4.7".
  4. 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.
  5. The Haskell Report – Layout
  6. MoonScript, a language that compiles to Lua
  7. MoonScript 0.5.0 – Language Guide
  8. reStructuredText Markup Specification – Indentation