جاري التحميل...
جاري التحميل...
تحسين الكود الموجود دون تغيير السلوك
إعادة الهيكلة هي عملية تحسين هيكل الكود دون تغيير سلوكيته الخارجية. الهدف هو جعل الكود أسهل للقراءة والصيانة والتوسع.
الكثير من المبرمجين يكتبون كوداً يعمل ثم يتركونه. لكن الكود النظيف يحتاج إلى صيانة مستمرة. الكود الفوضوي يصبح غالياً وخطيراً مع مرور الوقت.
💡 تشبيه بسيط::
تخيل غرفة مزدحمة بالأشياء. إعادة الهيكلة مثل تنظيم الغرفة: الأشياء نفسها، لكن أنت تعرف أين كل شيء ويمكنك الوصول إليه بسهولة.
هناك عدة مبادئ توجيه إعادة الهيكلة. الأشهر هي DRY و KISS، بالإضافة إلى تقنيات تحسين متنوعة سنستكشفها في هذا الدرس.
مبدأ DRY يعني: لا تكرر نفسك. كل قطعة من المعرفة يجب أن يكون لها تمثيل واحد واضح في النظام. إذا وجدت نفس المنطق مكرراً في أكثر من مكان، استخرجه في دالة أو وحدة مشتركة.
✅ فوائد DRY::
تقليل تكرار الكود، صيانة وتعديل أسهل، أخطاء أقل من النسخ واللصق، وضوح الكود.
مبدأ KISS يعني: أبقه بسيطاً. الكود يجب أن يكون بسيطاً ومقروءاً قدر الإمكان. إذا كان من الصعب فهم ما يفعله الكود، فإنه يحتاج إلى إعادة هيكلة.
عندما تكون الدالة طويلة جداً وتفعل أشياء كثيرة، قسمها إلى دوال أصغر كل واحدة مسؤولة عن شيء واحد.
أسماء المتغيرات الواضحة تجعل الكود أسهل للفهم. إعادة تسمية المتغيرات هي واحدة من أبسط تقنيات إعادة الهيكلة وأكثرها تأثيراً.
🔍 قواعد تسمية المتغيرات::
استخدم أسماء تصف ما يحتويه المتغير: userName بدلاً من x. استخدم أسماء أفعال للدوال: getUser بدلاً من user. تجنب الحروف المفردة إلا إذا كانت شائعة: i في الحلقات مقبول. استخدم الاتجاه الإنجليزي: المتغيرات كأسماء، الدوال كأفعال.
عندما يكون لديك جمل if/else أو switch طويلة تتحقق من أنواع البيانات، يُفضل استبدالها بـ التعدد الأشكال. هذا يجعل الكود أسهل للتوسع والصيانة.
💡 متى تستخدم التعدد الأشكال بدلاً من الشروط؟:
عندما يكون لديك أكثر من 3-4 حالات في شرط، عندما تحتاج إلى إضافة حالات جديدة ب頻度، عندما يكون لكل فرع منطق مختلف ومستقل.
أي مبدأ ينص على عدم تكرار الكود واستخراج المنطق المشترك في مكان واحد؟
لديك الدالة التالية التي تحسب متوسط درجات الطلاب. أعد هيكلتها باستخدام تقنيات DRY واستخراج الدالة وإعادة تسمية المتغير.
الحل:
function process(students) {
let total = 0;
let count = 0;
for (let i = 0; i < students.length; i++) {
if (students[i].grade >= 0 && students[i].grade <= 100) {
total += students[i].grade;
count++;
}
}
const avg = total / count;
let status;
if (avg >= 90) {
status = "Excellent";
} else if (avg >= 80) {
status = "Very Good";
} else if (avg >= 70) {
status = "Good";
} else if (avg >= 60) {
status = "Passing";
} else {
status = "Failing";
}
return { average: avg, count: count, status: status };
}المبادئ الأساسية:
تقنيات إعادة الهيكلة:
ما هي Code Smells الشائعة؟
الإجابة:
Duplicated code, long methods, large classes, magic numbers.
استخدم Extract Method
عندما تكون الدالة طويلة، افصل المنطق إلى دوال أصغر