الفرق بين المراجعتين لصفحة: «Refactoring/consolidate duplicate conditional fragments»
Khaled-yassin (نقاش | مساهمات) |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق |
||
سطر 6: | سطر 6: | ||
نقل الشيفرة البرمجية خارج الشَرطية. | نقل الشيفرة البرمجية خارج الشَرطية. | ||
=== | == مثال == | ||
=== قبل إعادة التصميم === | |||
استدعاء وتنفيذ الدالة <code>()send</code> في نهاية جميع فروع الكتلة <code>if</code> الشرطية سواءً أكان الشرط محققًا أم لا: | |||
في لغة Java:<syntaxhighlight lang="java"> | في لغة Java:<syntaxhighlight lang="java"> | ||
if (isSpecialDeal()) { | if (isSpecialDeal()) { | ||
سطر 47: | سطر 49: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== بعد إعادة التصميم === | |||
استخراج الدالة <code>()send</code> من البنية <code>if</code> الشرطية ووضعها بعدها: | |||
في لغة Java:<syntaxhighlight lang="java"> | في لغة Java:<syntaxhighlight lang="java"> | ||
if (isSpecialDeal()) { | if (isSpecialDeal()) { | ||
سطر 81: | سطر 85: | ||
== لم إعادة التصميم؟ == | == لم إعادة التصميم؟ == | ||
وجود الشيفرة البرمجية داخل جميع فروع البنية الشَرطية يعدُّ تكرارًا، إذ يحصل ذلك في كثير من الأحيان نتيجة تطور الشيفرة البرمجية داخل فروع الشرطية. ويمكن أن يكون فريق التطوير عاملًا مساهمًا في ذلك. | |||
== فوائد تطبيق الحل == | == فوائد تطبيق الحل == | ||
* إلغاء الشيفرة البرمجية المكررة. | * إلغاء الشيفرة البرمجية المكررة. | ||
== آلية الحل == | |||
# إذا كانت الشيفرة البرمجية المكررة في بداية فروع الشَرطية، انقل الشيفرة البرمجية إلى مكان | # إذا كانت الشيفرة البرمجية المكررة في بداية فروع البنية الشَرطية، انقل الشيفرة البرمجية إلى مكان قبلها. | ||
# إذا نُفِّذت الشيفرة البرمجية في نهاية | # إذا نُفِّذت الشيفرة البرمجية في نهاية الفروع البنية الشرطية، فضعها بعدها. | ||
# إذا كانت الشيفرة البرمجية المكررة | # إذا كانت الشيفرة البرمجية المكررة موجودةً بشكل عشوائي داخل الفروع، فحاول أولًا نقل الشيفرة البرمجية إلى بداية أو نهاية الفرع، استنادًا إلى ما إذا كانت ستغير من نتيجة الشيفرة البرمجية اللاحقة أم لا. | ||
# إذا كان ذلك | # إذا كان ذلك مناسبًا والشيفرة البرمجية المكررة أطول من سطر واحد، حاول استخدام [[Refactoring/extract method|استخراج التوابع]]. | ||
== انظر أيضًا == | == انظر أيضًا == |
المراجعة الحالية بتاريخ 08:22، 19 ديسمبر 2018
المشكلة
شيفرة برمجية متطابقة موجودة في جميع فروع الشَرطيات.
الحل
نقل الشيفرة البرمجية خارج الشَرطية.
مثال
قبل إعادة التصميم
استدعاء وتنفيذ الدالة ()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()
لم إعادة التصميم؟
وجود الشيفرة البرمجية داخل جميع فروع البنية الشَرطية يعدُّ تكرارًا، إذ يحصل ذلك في كثير من الأحيان نتيجة تطور الشيفرة البرمجية داخل فروع الشرطية. ويمكن أن يكون فريق التطوير عاملًا مساهمًا في ذلك.
فوائد تطبيق الحل
- إلغاء الشيفرة البرمجية المكررة.
آلية الحل
- إذا كانت الشيفرة البرمجية المكررة في بداية فروع البنية الشَرطية، انقل الشيفرة البرمجية إلى مكان قبلها.
- إذا نُفِّذت الشيفرة البرمجية في نهاية الفروع البنية الشرطية، فضعها بعدها.
- إذا كانت الشيفرة البرمجية المكررة موجودةً بشكل عشوائي داخل الفروع، فحاول أولًا نقل الشيفرة البرمجية إلى بداية أو نهاية الفرع، استنادًا إلى ما إذا كانت ستغير من نتيجة الشيفرة البرمجية اللاحقة أم لا.
- إذا كان ذلك مناسبًا والشيفرة البرمجية المكررة أطول من سطر واحد، حاول استخدام استخراج التوابع.