ऑफ-साइड नियम

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

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

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

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

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

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

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

कुछ प्रोग्रामिंग लैंग्वेज ओं में प्रत्येक ब्लॉक की शुरुआत और समाप्ति के लिए स्पष्ट कीवर्ड उपयोग किए जाते हैं। इस तरीके से कोड ब्लॉक की सीमाओं की परिलैंग्वेज में स्पष्टता और असंदिग्धता प्रदान करता है। ALGOL 60 और उसके वंशावली पास्कल में ब्लॉक   और "  कीवर्ड के बीच आते हैं। यह सिन्टेक्स यह सुनिश्चित करता है कि प्रत्येक ब्लॉक का प्रारंभ और समाप्ति स्पष्ट रूप से उल्लिखित होती है। यद्यपि प्रास्कल में इंडेंटेशन महत्वपूर्ण नहीं है, परंतु न्यूलाइन का उपयोग योग्यतात्मक हो सकता है। BASICऔर  फोरट्रान में, ब्लॉक का प्रारंभ ब्लॉक के नाम के साथ होती है (जैसे IF) और ब्लॉक के नाम के पहले " " लगाया जाता है (जैसे "END IF")।  फोरट्रान में प्रत्येक एक ब्लॉक का अपना स्वयं का नाम हो सकता है, जो लंबे कोड में और अधिक स्पष्टता जोड़ता है। ALGOL 60 और बोर्न शेल (sh, और bash) में, ब्लॉक की समाप्ति सामान्यतः पलटकर लिखे गए ब्लॉक के नाम द्वारा दी जाती है। उदाहरण के लिए, बोर्न शेल में स्विच कथन  " से प्रारंभ होता है और " " तक चलता है।

इसी तरह, ALGOL 60 में ... ...[ ...[ ...]]  और बैश में " ... ... " जैसी शर्ताधारी वाक्यांशों के द्वारा ब्लॉक का प्रारंभ और समाप्ति स्पष्टतः निर्दिष्ट की जाती है। ये स्पष्ट ब्लॉक निर्देशक ब्लॉक कोड को पठनीयता बढ़ाने में सहायक होते हैं और गलतियों के प्रति कम संवेदनशील बनाते हैं। विकाशक सरलता से प्रत्येक ब्लॉक की सीमाओं को पहचान सकते हैं, जो कोड की समझ और रखरखाव में सहायक हो सकते है।

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

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

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

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

 * एबीसी (प्रोग्रामिंग लैंग्वेज )
 * बू (प्रोग्रामिंग लैंग्वेज )
 * बडीस्क्रिप्ट
 * कोबरा (प्रोग्रामिंग लैंग्वेज )
 * कॉफ़ीस्क्रिप्ट
 * जुटना
 * करी (प्रोग्रामिंग लैंग्वेज )
 * एल्म (प्रोग्रामिंग लैंग्वेज )
 * F (प्रारंभिक संस्करणों में, जब  निर्दिष्ट किया जाता है; बाद के संस्करणों में जब    नहीं होता है )
 * जिन्न (प्रोग्रामिंग लैंग्वेज )
 * जीडीस्क्रिप्ट (गोडोट इंजन)
 * हास्केल (प्रोग्रामिंग लैंग्वेज ) (केवल,  ,  , या   खंड जब ब्रेसिज़ छोड़े जाते हैं)
 * सूचित करें 7
 * आईएसडब्ल्यूआईएम, वह अमूर्त लैंग्वेज जिसने नियम प्रस्तुत किया
 * लाइवस्क्रिप्ट (प्रोग्रामिंग लैंग्वेज )
 * मिरांडा (प्रोग्रामिंग लैंग्वेज )
 * मूनस्क्रिप्ट
 * नेमर्ले, वैकल्पिक मोड
 * निम (प्रोग्रामिंग लैंग्वेज )
 * अवसर (प्रोग्रामिंग लैंग्वेज )
 * प्रोमल
 * पायथन (प्रोग्रामिंग लैंग्वेज )
 * स्काला (प्रोग्रामिंग लैंग्वेज ), वैकल्पिक मोड
 * योजना (प्रोग्रामिंग लैंग्वेज ), कार्यान्वयन के लिए कई योजना अनुरोधों में से एक का उपयोग करते समय, जिनमें से नवीनतम है
 * स्पिन (प्रोग्रामिंग लैंग्वेज )
 * वोमा
 * एक्सएल (प्रोग्रामिंग लैंग्वेज )

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

 * जांघ
 * मेक (सॉफ़्टवेयर)
 * पुनः संरचित पाठ
 * सैस (स्टाइलशीट लैंग्वेज )
 * स्टाइलस (स्टाइलशीट लैंग्वेज )
 * वाईएएमएल
 * पग (पूर्व में जेड),

यह भी देखें

 * प्रिटीप्रिंट
 * प्रिटीप्रिंट