توحيد الأجزاء الشرطية المكررة (Consolidate Duplicate Conditional Fragments)
المشكلة
شيفرة برمجية متطابقة موجودة في جميع فروع الشَرطيات.
الحل
نقل الشيفرة البرمجية خارج الشَرطية.
مثال
قبل إعادة التصميم
استدعاء وتنفيذ الدالة ()send
في نهاية جميع فروع الكتلة if
الشرطية سواءً أكان الشرط محققًا أم لا:
في لغة Java:
if (isSpecialDeal()) {
total = price * 0.95;
send();
}
else {
total = price * 0.98;
send();
}
في لغة C#:
if (IsSpecialDeal())
{
total = price * 0.95;
Send();
}
else
{
total = price * 0.98;
Send();
}
في لغة PHP:
if (isSpecialDeal()) {
$total = $price * 0.95;
send();
}
else {
$total = $price * 0.98;
send();
}
في لغة Python:
if isSpecialDeal():
total = price * 0.95
send()
else:
total = price * 0.98
send()
بعد إعادة التصميم
استخراج الدالة ()send
من البنية if
الشرطية ووضعها بعدها:
في لغة Java:
if (isSpecialDeal()) {
total = price * 0.95;
}
else {
total = price * 0.98;
}
send();
في لغة C#:
if (IsSpecialDeal())
{
total = price * 0.95;
}
else
{
total = price * 0.98;
}
Send();
في لغة PHP:
if (isSpecialDeal())
$total = $price * 0.95;
else
$total = $price * 0.98;
send();
في لغة Python:
if isSpecialDeal():
total = price * 0.95
else:
total = price * 0.98
send()
لم إعادة التصميم؟
وجود الشيفرة البرمجية داخل جميع فروع البنية الشَرطية يعدُّ تكرارًا، إذ يحصل ذلك في كثير من الأحيان نتيجة تطور الشيفرة البرمجية داخل فروع الشرطية. ويمكن أن يكون فريق التطوير عاملًا مساهمًا في ذلك.
فوائد تطبيق الحل
- إلغاء الشيفرة البرمجية المكررة.
آلية الحل
- إذا كانت الشيفرة البرمجية المكررة في بداية فروع البنية الشَرطية، انقل الشيفرة البرمجية إلى مكان قبلها.
- إذا نُفِّذت الشيفرة البرمجية في نهاية الفروع البنية الشرطية، فضعها بعدها.
- إذا كانت الشيفرة البرمجية المكررة موجودةً بشكل عشوائي داخل الفروع، فحاول أولًا نقل الشيفرة البرمجية إلى بداية أو نهاية الفرع، استنادًا إلى ما إذا كانت ستغير من نتيجة الشيفرة البرمجية اللاحقة أم لا.
- إذا كان ذلك مناسبًا والشيفرة البرمجية المكررة أطول من سطر واحد، حاول استخدام استخراج التوابع.