C++ में स्वच्छ कोड: ऐसे लिखें कि एक साल बाद भी शर्म न आए

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ में स्वच्छ कोड: पांडित्य नहीं, बल्कि सम्मान की बात

\n\n

यदि आपने कभी एक साल पहले "जल्दी-जल्दी" लिखी गई परियोजना खोली हो और doStuff() नामक फ़ंक्शन को समझ न पाए हों, तो आप जानते हैं कि मैं किस बारे में बात कर रहा हूँ। C++ में स्वच्छ कोड केवल सौंदर्यशास्त्र नहीं है। यह समय, तनाव और पैसे की बचत है। C++ एक शक्तिशाली भाषा है, लेकिन धोखेबाज भी: मेमोरी मैन्युअल रूप से प्रबंधित की जाती है, टेम्पलेट राक्षस पैदा कर सकते हैं, और ऑपरेटर ओवरलोडिंग असली जादू है। अनुशासन के बिना, कोड जल्दी से "स्पेगेटी" में बदल जाता है।

\n\n

इस लेख में, हम चर्चा करेंगे कि C++ में स्वच्छ कोड कैसे लिखें ताकि इसे पढ़ना, बनाए रखना और विस्तारित करना आसान हो। कोई बेकार बात नहीं - केवल अभ्यास, उदाहरण और सिद्ध सिद्धांत।

\n\n

नियम #1: नामकरण 50% सफलता है

\n\n

चर, फ़ंक्शन और वर्गों के नाम "यह क्या है?" या "यह क्या करता है?" प्रश्न का उत्तर देने चाहिए। int x और void f() को भूल जाइए। सार्थक नामों का उपयोग करें।

\n\n

खराब उदाहरण

\n
int d; // d क्या है? दूरी? तारीख? मूर्ख?\nvoid p() { // प्रिंट करता है? पार्स करता है? रोता है?\n    // ...\n}
\n\n

अच्छा उदाहरण

\n
int distanceInMeters;\nvoid printUserProfile() {\n    // ...\n}
\n\n

सुझाव: एक ही शैली का पालन करें। C++ के लिए मानक है: चर और फ़ंक्शन के लिए camelCase, वर्गों के लिए PascalCase। एक ही परियोजना में snake_case और camelCase न मिलाएं - इससे पठनीयता कम होती है।

\n\n

नियम #2: फ़ंक्शन छोटे होने चाहिए और एक ही काम करने चाहिए

\n\n

एकल जिम्मेदारी का सिद्धांत (Single Responsibility) न केवल वर्गों के लिए, बल्कि फ़ंक्शन के लिए भी काम करता है। आदर्श फ़ंक्शन 5-20 पंक्तियों का होता है। यदि कोई फ़ंक्शन एक से अधिक कार्य करता है - तो उसे विभाजित करें।

\n\n

खराब

\n
void processData(vector<int>& data) {\n    // सॉर्टिंग\n    sort(data.begin(), data.end());\n    // फ़िल्टरिंग\n    vector<int> filtered;\n    for (int x : data) if (x > 0) filtered.push_back(x);\n    // आउटपुट\n    for (int x : filtered) cout << x << " ";\n}
\n\n

अच्छा

\n
vector<int> filterPositive(const vector<int>& data) {\n    vector<int> result;\n    for (int x : data) if (x > 0) result.push_back(x);\n    return result;\n}\n\nvoid printData(const vector<int>& data) {\n    for (int x : data) cout << x << " ";\n}\n\nvoid processData(vector<int>& data) {\n    sort(data.begin(), data.end());\n    auto filtered = filterPositive(data);\n    printData(filtered);\n}
\n\n

अब प्रत्येक फ़ंक्शन को अलग-अलग पुन: उपयोग और परीक्षण किया जा सकता है। C++ में स्वच्छ कोड का अर्थ है मॉड्यूलरिटी।

\n\n

नियम #3: जादुई संख्याओं और स्ट्रिंग्स से बचें

\n\n

वे संख्याएँ और स्ट्रिंग्स जिनका अर्थ संदर्भ से स्पष्ट नहीं है, बुरी हैं। उन्हें स्थिरांक में रखें।

\n\n

खराब

\n
if (temperature > 100) {\n    cout << "खतरनाक!";\n}
\n\n

अच्छा

\n
constexpr int MAX_SAFE_TEMPERATURE = 100;\n\nif (temperature > MAX_SAFE_TEMPERATURE) {\n    cout << "खतरनाक!";\n}
\n\n

अब, यदि सीमा बदलती है, तो आप इसे एक ही स्थान पर बदलेंगे। कोड में सभी 100 खोजने की आवश्यकता नहीं होगी।

\n\n

नियम #4: टिप्पणियाँ खराब कोड का बहाना नहीं हैं

\n\n

सबसे अच्छी टिप्पणी वह है जिसकी आवश्यकता नहीं है, क्योंकि कोड स्वयं बोलता है। "कोड क्या करता है" न लिखें - यह दिखाई देता है। "वह ऐसा क्यों करता है" लिखें।

\n\n

खराब टिप्पणी

\n
// i को 1 से बढ़ाएँ\ni++;
\n\n

अच्छी टिप्पणी

\n
// POD प्रकारों के लिए प्री-इन्क्रीमेंट का उपयोग करें - तेज़ है\n++i;
\n\n

अधूरे भागों के लिए // TODO: का उपयोग करें, लेकिन इसका दुरुपयोग न करें। आदर्श कोड को स्पष्टीकरण की आवश्यकता नहीं होती।

\n\n

नियम #5: RAII और स्मार्ट पॉइंटर्स का उपयोग करें

\n\n

C++ मैन्युअल मेमोरी प्रबंधन के लिए प्रसिद्ध है, लेकिन आधुनिक C++ (C++11 और उसके बाद) में शक्तिशाली उपकरण हैं

ब्लॉग

पुस्तक अनुशंसाएँ