जब "काम करता है" — यह मुख्य बात नहीं है
\nएक स्थिति की कल्पना करें: आप C++ में किसी और का पुल-रिक्वेस्ट खोलते हैं। कोड कंपाइल होता है, टेस्ट पास होते हैं, लॉजिक सही है। लेकिन आप यह समझने में 40 मिनट बिता देते हैं कि क्या हो रहा है। वेरिएबल्स का नाम a, b, ptr2 है, इंडेंटेशन 2 से 8 स्पेस के बीच उछलता है, और एक फाइल में snake_case और camelCase मिश्रित हैं। परिचित लगता है?
एकल डेवलपमेंट में ऐसी अराजकता को अभी भी सहा जा सकता है। लेकिन जैसे ही प्रोजेक्ट में दूसरा, तीसरा या दसवां डेवलपर आता है, एक समान C++ code style की कमी कोड को "दलदल" में बदल देती है। हर कोई अपनी आदत के अनुसार लिखता है, और कोड-रिव्यू पर समय तेजी से बढ़ता है।
\nइस लेख में, हम चर्चा करेंगे कि टीम में वास्तव में कौन से C++ कन्वेंशन काम करते हैं, उन्हें बिना दर्द के कैसे लागू करें, और यह आपकी नसों और पैसे क्यों बचाएगा। चलिए शुरू करते हैं!
\n\nCode Style "सुंदर" के बारे में नहीं, बल्कि पैसे के बारे में क्यों है
\nबहुत से लोग सोचते हैं कि कोड स्टाइल पर बहस करना समय की बर्बादी है। व्यवहार में, शोध (जैसे Google और Microsoft से) दिखाते हैं: कोड की पठनीयता सीधे बग्स की संख्या को प्रभावित करती है। जब डेवलपर लिखे गए कोड को समझने में कम प्रयास खर्च करता है, तो वह रिफैक्टरिंग के दौरान कम गलतियाँ करता है और समस्याओं को तेजी से ढूंढता है।
\nएक समान C++ कोड मानक टीम को तीन प्रमुख लाभ देता है:
\n- \n
- ऑनबोर्डिंग की गति। नया सदस्य यह अनुमान नहीं लगाता कि यहाँ कैसे लिखना है — वह बस कोई भी फाइल देखता है और पैटर्न समझ जाता है। \n
- कोड-रिव्यू में न्यूनतम विवाद। "इंडेंटेशन बदलो" कहने के बजाय, आप आर्किटेक्चर और लॉजिक पर चर्चा करते हैं। \n
- ऑटोमेशन। फॉर्मेटर और लिंटर रूटीन काम संभाल लेते हैं, जिससे रचनात्मकता के लिए दिमाग खाली रहता है। \n
अच्छी खबर: आपको पहिया का पुनः आविष्कार करने की आवश्यकता नहीं है। सिद्ध C++ best practices मौजूद हैं, जो किसी भी प्रोजेक्ट के अनुकूल हो सकती हैं।
\n\nमुख्य C++ कन्वेंशन: नेमिंग से लेकर फॉर्मेटिंग तक
\nआइए प्रमुख बिंदुओं पर चलते हैं जिन्हें code style guide में तय किया जाना चाहिए। प्रत्येक बिंदु के लिए, मैं "खराब" और "अच्छा" उदाहरण दूंगा।
\n\n1. नामकरण: snake_case बनाम CamelCase बनाम PascalCase
\nC++ में ऐतिहासिक रूप से एक हाइब्रिड दृष्टिकोण विकसित हुआ है। मानक लाइब्रेरी snake_case का उपयोग करती है, कई कंपनियाँ (Google, Microsoft) भी वेरिएबल्स और फंक्शन्स के लिए इसे पसंद करती हैं। क्लासेस और स्ट्रक्चर्स के लिए अक्सर PascalCase लिया जाता है।
खराब नेमिंग का उदाहरण:
\nclass datamanager {\n int numberOfElements;\n void ProcessData(int* ptr) { ... }\n};\nसमस्याएँ: क्लास snake_case में, मेथड CamelCase में, कोई संदर्भ नहीं। बेहतर इस प्रकार है:
\nclass DataManager {\n int number_of_elements_;\n void ProcessData(int* data_ptr) { ... }\n};\nयहाँ क्या सुधारा गया:
\n- \n
- क्लास —
PascalCase। \n - फील्ड्स — प्राइवेट मेंबर्स के लिए अंडरस्कोर सफिक्स के साथ
snake_case(Google शैली)। \n - मेथड —
PascalCase(याsnake_case, यदि टीम में यह स्वीकार्य है)। \n - पैरामीटर —
_ptrसफिक्स के साथsnake_case, ताकि तुरंत पता चले कि यह पॉइंटर है। \n
सुझाव: पूरे प्रोजेक्ट के लिए एक शैली चुनें। एक ही फाइल में getValue() और get_value() का मिश्रण भ्रम का सीधा रास्ता है।
2. फॉर्मेटिंग: स्पेस, ब्रैकेट और लाइन की लंबाई
\nसबसे आम विवाद का स्रोत — ओपनिंग ब्रैकेट कहाँ रखें: उसी लाइन पर या अगली लाइन पर? C++ में इसे उसी लाइन पर रखना आम है (K&R शैली), लेकिन विविधताएँ हैं।
\nएक समान शैली का उदाहरण:
\nvoid CalculateSum(const std::vector<int>& values) {\n int sum = 0;\n for (size_t i = 0; i < values.size(); ++i) {\n sum += values[i];\n }\n return sum;\n}