الكود النظيف في C++: كيف تكتبه بحيث لا تخجل منه بعد عام

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا الكود النظيف في C++ ليس عن التحذلق، بل عن الاحترام



إذا سبق لك أن فتحت مشروعًا مكتوبًا "على عجل" منذ عام، ولم تستطع فهم ما تفعله دالة اسمها doStuff() - فأنت تعرف ما نتحدث عنه. الكود النظيف في C++ ليس مجرد جماليات. إنه توفير للوقت والأعصاب والمال. C++ لغة قوية، ولكنها أيضًا خادعة: إدارة الذاكرة يدوية، والقوالب يمكن أن تنتج وحوشًا، وتحميل العوامل الزائد يمكن أن يكون سحرًا حقيقيًا. بدون انضباط، يتحول الكود بسرعة إلى "معكرونة".



في هذه المقالة، سنشرح كيفية كتابة كود نظيف في C++ بحيث يكون سهل القراءة والصيانة والتوسيع. لا ماء - فقط ممارسة وأمثلة ومبادئ مثبتة.



القاعدة رقم 1: التسمية هي 50% من النجاح



يجب أن تجيب أسماء المتغيرات والدوال والكلاسات على السؤال "ما هذا؟" أو "ماذا يفعل؟". انسَ int x و void f(). استخدم أسماء ذات معنى.



مثال سيء

int d; // ما هو d؟ مسافة؟ تاريخ؟ أحمق؟void p() { // يطبع؟ يحلل؟ يبكي؟    // ...}


مثال جيد

int distanceInMeters;void printUserProfile() {    // ...}


نصيحة: التزم بأسلوب واحد. بالنسبة لـ C++، المعيار هو camelCase للمتغيرات والدوال، و PascalCase للكلاسات. لا تخلط snake_case و camelCase في مشروع واحد - فهذا يقلل من قابلية القراءة.



القاعدة رقم 2: يجب أن تكون الدوال صغيرة وتقوم بشيء واحد



مبدأ المسؤولية الواحدة (Single Responsibility) لا يعمل فقط للكلاسات، بل أيضًا للدوال. الدالة المثالية هي 5-20 سطرًا. إذا كانت الدالة تقوم بأكثر من إجراء واحد - قسّمها.



سيء

void processData(vector<int>& data) {    // ترتيب    sort(data.begin(), data.end());    // تصفية    vector<int> filtered;    for (int x : data) if (x > 0) filtered.push_back(x);    // إخراج    for (int x : filtered) cout << x << " ";}


جيد

vector<int> filterPositive(const vector<int>& data) {    vector<int> result;    for (int x : data) if (x > 0) result.push_back(x);    return result;}

void printData(const vector<int>& data) { for (int x : data) cout << x << " ";}

void processData(vector<int>& data) { sort(data.begin(), data.end()); auto filtered = filterPositive(data); printData(filtered);}


الآن يمكن إعادة استخدام كل دالة واختبارها بشكل منفصل. الكود النظيف في C++ هو قابلية التعديل.



القاعدة رقم 3: تجنب الأرقام والسلاسل السحرية



الأرقام والسلاسل التي لا يُفهم معناها من السياق هي شر. أخرجها إلى ثوابت.



سيء

if (temperature > 100) {    cout << "خطر!";}


جيد

constexpr int MAX_SAFE_TEMPERATURE = 100;

if (temperature > MAX_SAFE_TEMPERATURE) { cout << "خطر!";}


الآن، إذا تغيرت العتبة، ستغيرها في مكان واحد. ولن تبحث عن جميع 100 في الكود.



القاعدة رقم 4: التعليقات ليست عذرًا للكود السيء



أفضل تعليق هو الذي لا تحتاجه، لأن الكود يتحدث عن نفسه. لا تكتب "ماذا يفعل الكود" - هذا واضح. اكتب "لماذا يفعل ذلك".



تعليق سيء

// نزيد i بمقدار 1i++;


تعليق جيد

// نستخدم pre-increment للأنواع POD - أسرع++i;


استخدم // TODO: للأجزاء غير المكتملة، لكن لا تفرط في استخدامها. الكود المثالي لا يحتاج إلى تفسيرات.



القاعدة رقم 5: استخدم RAII والمؤشرات الذكية



تشتهر C++ بإدارة الذاكرة اليدوية، ولكن في C++ الحديثة (C++11 وما بعده) توجد أدوات قوية

المدونات

توصيات الكتب