الفرق بين المراجعتين لصفحة: «Refactoring/consolidate duplicate conditional fragments»

من موسوعة حسوب
ط مراجعة وتدقيق
 
سطر 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|استخراج التوابع]].
# إذا كان ذلك مناسبًا والشيفرة البرمجية المكررة أطول من سطر واحد، حاول استخدام [[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()

لم إعادة التصميم؟

وجود الشيفرة البرمجية داخل جميع فروع البنية الشَرطية يعدُّ تكرارًا، إذ يحصل ذلك في كثير من الأحيان نتيجة تطور الشيفرة البرمجية داخل فروع الشرطية. ويمكن أن يكون فريق التطوير عاملًا مساهمًا في ذلك.

فوائد تطبيق الحل

  • إلغاء الشيفرة البرمجية المكررة.

آلية الحل

  1. إذا كانت الشيفرة البرمجية المكررة في بداية فروع البنية الشَرطية، انقل الشيفرة البرمجية إلى مكان قبلها.
  2. إذا نُفِّذت الشيفرة البرمجية في نهاية الفروع البنية الشرطية، فضعها بعدها.
  3. إذا كانت الشيفرة البرمجية المكررة موجودةً بشكل عشوائي داخل الفروع، فحاول أولًا نقل الشيفرة البرمجية إلى بداية أو نهاية الفرع، استنادًا إلى ما إذا كانت ستغير من نتيجة الشيفرة البرمجية اللاحقة أم لا.
  4. إذا كان ذلك مناسبًا والشيفرة البرمجية المكررة أطول من سطر واحد، حاول استخدام استخراج التوابع.

انظر أيضًا

مصادر