कोडिंग कन्वेंशन

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

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

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

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

मूल लेखक के लिए भी, संगत ढंग से कोडिंग किया गया सॉफ़्टवेयर रखरखाव को सरल बनाता है। इस बात की कोई गारंटी नहीं है कि किसी व्यक्ति को सटीक तर्क याद होगा कि कोड का एक विशेष टुकड़ा मूल रूप से कोड लिखे जाने के लंबे समय बाद एक निश्चित विधि से क्यों लिखा गया था। कोडिंग नियम मदद कर सकते हैं। व्हॉट्सएप (कंप्यूटर साइंस) के लगातार उपयोग से पठनीयता में सुधार होता है इसके साथ ही, यह समय कम करता है जो सॉफ़्टवेयर को समझने में लगता है।

कोडिंग मानक
जब कोडिंग नियम विशेष रूप से उच्च-गुणवत्ता कोड उत्पन्न करने के लिए तैयार किए जाते हैं और फिर उन्हें सामरिक रूप से अपनाया जाता है, तो वे कोडिंग मानक बन जाते हैं। विशेष शैलियाँ, चाहे वे सामान्य रूप से अपनायी जाती हों या न हों, स्वचालित रूप से अच्छी गुणवत्ता कोड उत्पन्न नहीं करती हैं।

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

जटिलता को डिज़ाइन चरण (परियोजना को कैसे आर्किटेक्चर किया जाता है) और विकास स्तर पर (सरल कोड होने से) दोनों में प्रबंधित किया जाता है। यदि कोडिंग को बुनियादी और सरल रखा जाए तो जटिलता कम से कम हो जाएगी। बहुत बार यह कोडिंग को यथासंभव 'भौतिक' के रूप में रख रहा है - कोडिंग इस तरह से है जो बहुत प्रत्यक्ष है और अत्यधिक सार नहीं है। यह इष्टतम कोड उत्पन्न करता है जिसे पढ़ना और अनुसरण करना आसान है। सरल कार्यों के लिए जटिल उपकरणों का उपयोग न करके भी जटिलता से बचा जा सकता है।

कोड जितना अधिक जटिल होता है, उसके बग्गी होने की संभावना उतनी ही अधिक होती है, बग को ढूंढना उतना ही कठिन होता है और बग के छिपे होने की संभावना भी उतनी ही अधिक होती है।

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

फुर्तीली सॉफ्टवेयर विकास योजना नियमित (या यहां तक ​​कि निरंतर) रिफैक्टरिंग के लिए इसे टीम सॉफ्टवेयर विकास प्रक्रिया का एक अभिन्न अंग बनाती है।

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

अनुरूप कोडिंग मानक, बदले में, माप को अधिक सुसंगत बना सकते हैं। स्रोत कोड टिप्पणियों के भीतर विशेष टैग (मेटाडेटा) का उपयोग अक्सर प्रलेखन को संसाधित करने के लिए किया जाता है, दो उल्लेखनीय उदाहरण जावाडोक और doxygen हैं। उपकरण टैग के एक सेट के उपयोग को निर्दिष्ट करते हैं, लेकिन एक परियोजना के भीतर उनका उपयोग परिपाटी द्वारा निर्धारित किया जाता है।

कोडिंग कन्वेंशन नए सॉफ़्टवेयर को लिखना आसान बनाता है जिसका काम मौजूदा सॉफ़्टवेयर को प्रोसेस करना है। 1950 के दशक से स्थिर कोड विश्लेषण का उपयोग लगातार बढ़ा है। विकास उपकरणों के इस वर्ग की कुछ वृद्धि स्वयं चिकित्सकों की बढ़ी हुई परिपक्वता और परिष्कार से उत्पन्न होती है (और जीवन-महत्वपूर्ण प्रणालियों और भेद्यता (कंप्यूटिंग) के लिए सुरक्षा-महत्वपूर्ण # सॉफ़्टवेयर इंजीनियरिंग पर आधुनिक ध्यान), लेकिन यह भी प्रकृति से भाषाएँ स्वयं।

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

एक भाषा में एक सम्मेलन दूसरे में एक आवश्यकता हो सकती है। भाषा सम्मेलन व्यक्तिगत स्रोत फ़ाइलों को भी प्रभावित करते हैं। स्रोत कोड को संसाधित करने के लिए प्रयुक्त प्रत्येक संकलक (या दुभाषिया) अद्वितीय है। स्रोत पर एक कंपाइलर लागू होने वाले नियम अंतर्निहित मानक बनाता है। उदाहरण के लिए, पर्ल की तुलना में पायथन कोड बहुत अधिक लगातार इंडेंट है, क्योंकि व्हॉट्सएप (इंडेंटेशन) वास्तव में दुभाषिया के लिए महत्वपूर्ण है। पायथन ब्रेस सिंटैक्स पर्ल का उपयोग कार्यों को सीमित करने के लिए नहीं करता है। इंडेंटेशन में परिवर्तन डिलीमीटर के रूप में कार्य करता है। टीसीएल, जो कार्यों को सीमित करने के लिए पर्ल या सी/सी ++ के समान ब्रेस सिंटैक्स का उपयोग करता है, निम्नलिखित की अनुमति नहीं देता है, जो सी प्रोग्रामर के लिए काफी उचित लगता है: कारण यह है कि टीसीएल में, घुंघराले ब्रेसिज़ का उपयोग केवल सी या जावा के कार्यों को सीमित करने के लिए नहीं किया जाता है। अधिक आम तौर पर, कर्ली ब्रेसिज़ का उपयोग शब्दों को समूहबद्ध करने के लिए एक ही तर्क में किया जाता है। टीसीएल में, 'जबकि' शब्द दो तर्क, एक शर्त और एक क्रिया लेता है। ऊपर दिए गए उदाहरण में, 'जबकि' अपना दूसरा तर्क, इसकी क्रिया याद कर रहा है (क्योंकि टीसीएल कमांड के अंत को सीमित करने के लिए न्यूलाइन वर्ण का भी उपयोग करता है)।

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

कोडिंग मानकों में सीईआरटी सी कोडिंग मानक, मिश्रा सी, उच्च अखंडता सी ++ शामिल हैं, नीचे दी गई सूची देखें।

यह भी देखें

 * प्रोग्रामिंग भाषाओं की तुलना (सिंटैक्स)
 * हंगेरियन नोटेशन
 * इंडेंट स्टाइल
 * स्थिर कोड विश्लेषण के लिए उपकरणों की सूची
 * सॉफ्टवेयर विकास दर्शन की सूची
 * मोटर उद्योग सॉफ्टवेयर विश्वसनीयता संघ
 * प्रोग्रामिंग शैली
 * सॉफ्टवेयर मेट्रिक्स
 * सॉफ्टवेयर की गुणवत्ता
 * 10 की शक्ति: सुरक्षा-महत्वपूर्ण कोड विकसित करने के नियम

भाषाओं के लिए कोडिंग परंपराएं

 * एक्शनस्क्रिप्ट: फ्लेक्स एसडीके कोडिंग कन्वेंशन और सर्वोत्तम अभ्यास
 * Ada: Ada 95 क्वालिटी और स्टाइल गाइड: प्रोफेशनल प्रोग्रामर्स के लिए दिशानिर्देश
 * एडीए: हाई इंटीग्रिटी सिस्टम में एडीए प्रोग्रामिंग लैंग्वेज के इस्तेमाल के लिए गाइड (आईएसओ/आईईसी टीआर 15942:2000)
 * एडीए: नासा फ्लाइट सॉफ्टवेयर ब्रांच-एडा कोडिंग स्टैंडर्ड
 * एडीए: ईएसए एडीए कोडिंग स्टैंडर्ड - बीएसएससी(98)3 अंक 1 अक्टूबर 1998
 * एडा: यूरोपियन स्पेस एजेंसी की सॉफ्टवेयर इंजीनियरिंग और मानकीकरण
 * C: CERT C कोडिंग मानक CERT C कोडिंग मानक (SEI)
 * C: Embedded C Coding Standard (बार ग्रुप)
 * C: फ़र्मवेयर डेवलपमेंट स्टैंडर्ड (जैक गांस्ले)
 * सी: मिश्रा सी
 * सी: टीआईओबीई सी मानक
 * C++: C++ कोर दिशानिर्देश (बज़्ने स्ट्रॉस्ट्रुप, हर्ब सटर)
 * C++: क्वांटम लीप्स C/C++ कोडिंग स्टैंडर्ड
 * C++: b:C++ प्रोग्रामिंग/प्रोग्रामिंग लैंग्वेज/C++/कोड/स्टाइल कन्वेंशन|C++ प्रोग्रामिंग/प्रोग्रामिंग लैंग्वेज/C++/कोड/स्टाइल कन्वेंशन
 * C++: GeoSoft's C++ प्रोग्रामिंग स्टाइल गाइडलाइंस
 * C++: Google की C++ स्टाइल गाइड
 * सी++: उच्च अखंडता सी++
 * सी++: मिश्रा C++
 * C++: Philips Healthcare C++ कोडिंग मानक
 * C/C++: ]/software-quality C/C++ कोडिंग दिशानिर्देश] देवोलो से
 * C#: C# कोडिंग कन्वेंशन (C# प्रोग्रामिंग गाइड)
 * सी#: क्लास लाइब्रेरी विकसित करने के लिए डिज़ाइन दिशानिर्देश
 * सी#: ब्रैड अब्राम्स
 * C#: Philips Healthcare या Philips Healthcare C# कोडिंग मानक
 * डी: डी स्टाइल
 * डार्ट: डार्ट स्टाइल गाइड
 * Erlang: Erlang प्रोग्रामिंग नियम और परंपराएं
 * फ्लेक्स: फ्लेक्स एसडीके के लिए कोड कन्वेंशन
 * जावा: जावा के लिए एंबीसॉफ्ट के कोडिंग मानक
 * जावा: जावा प्रोग्रामिंग लैंग्वेज के लिए कोड कन्वेंशन (सक्रिय रूप से अनुरक्षित नहीं। नवीनतम संस्करण: 1999-APR-20।)
 * जावा: जियोसॉफ्ट के जावा प्रोग्रामिंग स्टाइल दिशानिर्देश
 * जावा:
 * जावा: टीआईओबीई जावा मानक
 * जावा: SoftwareMonkey's कोडिंग कन्वेंशन जावा और अन्य ब्रेस-सिंटेक्स भाषाओं के लिए
 * जावास्क्रिप्ट: जावास्क्रिप्ट प्रोग्रामिंग लैंग्वेज के लिए कोड कन्वेंशन
 * लिस्प: Riastrad's Lisp स्टाइल रूल्स
 * MATLAB: MATLAB के लिए न्यूरोबैट कोडिंग कन्वेंशन
 * ऑब्जेक्ट पास्कल: ऑब्जेक्ट पास्कल स्टाइल गाइड
 * पर्ल: पर्ल स्टाइल गाइड
 * PHP::PEAR: PHP::PEAR कोडिंग मानक
 * PHP::FIG: PHP फ्रेमवर्क इंटरॉप ग्रुप
 * पीएल/आई: पीएल/आई स्टाइल गाइड
 * Python: Python कोड के लिए स्टाइल गाइड
 * आर: साफ-सुथरा स्टाइल गाइड
 * रूबी: अनौपचारिक रूबी उपयोग गाइड
 * रूबी: GitHub रूबी स्टाइल गाइड
 * शैल: Google की शैल स्टाइल गाइड

परियोजनाओं के लिए कोडिंग सम्मेलन

 * अपाचे डेवलपर्स की सी लैंग्वेज स्टाइल गाइड
 * Drupal PHP कोडिंग मानक
 * जीएनयू कोडिंग मानक
 * (PDF)
 * Linux Kernel Coding Style (या Linux Kernel source tree में Documentation/CodingStyle)
 * Mozilla Coding Style Guide
 * मोनो: मोनो के लिए प्रोग्रामिंग शैली
 * OpenBSD कर्नेल सोर्स फ़ाइल स्टाइल गाइड (KNF)
 * रोड इंट्रानेट के C++ दिशानिर्देश
 * Google द्वारा उत्पन्न ओपन-सोर्स प्रोजेक्ट के लिए स्टाइल गाइड
 * The NetBSD सोर्स कोड स्टाइल गाइड (पहले इसे BSD कर्नेल नॉर्मल फॉर्म के नाम से जाना जाता था)
 * Zend फ्रेमवर्क कोडिंग मानक
 * ZeroMQ C लैंग्वेज स्टाइल फॉर स्केलेबिलिटी (क्लास)

श्रेणी:स्रोत कोड