تكرار السؤال: …
الإجابة المختصرة
هو مقياس كمي لعدد المسارات المنطقية المستقلة داخل الدالة، ويُحسب بعدد نقاط التفرع (if, while, for, case, &&, ||) مضافاً إليها واحد.
الشرح
كلما زاد التعقيد الدوري (فوق 10)، كلما تطلب الكود كتابة عدد أكبر من اختبارات الوحدة لتغطية كل السيناريوهات، وزادت احتمالية الأخطاء غير المتوقعة. تقنيات تخفيض التعقيد: (1) استخدام حراس الإرجاع المبكر (Guard Clauses) للتخلص من التداخل العميق (Arrow Anti-pattern). (2) استبدال الشروط بتعدد الأشكال (Replace Conditional with Polymorphism). (3) استخراج الدوال المعقدة (Extract Method).
مثال بالكود
// قبل (تعقيد عالي وتداخل عميق):
function process(user) {
if (user != null) {
if (user.isActive) {
if (user.hasPermission) { doSomething(); }
}
}
}
// بعد (Guard Clauses - تعقيد منخفض ومسطح):
function process(user) {
if (!user || !user.isActive || !user.hasPermission) return;
doSomething();
}أخطاء شائعة
- كتابة كتل if متداخلة لـ 5 أو 6 مستويات، مما يجعل قراءة الكود صعبة جداً وتتبع الحالات مستحيلاً.