الفرق بين المراجعتين ل"Refactoring/consolidate conditional expression"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: توحيد التعبير الشرطي (Consolidate Conditional Expression)}}</noinclude> == المشكلة == وجود عدة شَرطيات...')
 
سطر 103: سطر 103:
 
== آلية الحل ==
 
== آلية الحل ==
 
قبل إعادة التصميم، تأكد من أن الشرطية لا تملك أي "آثار جانبية" أو تُعدِّل شيئًا خلاف ذلك، بدلًا من مجرد إعادة القيم. قد تختبئ الآثار الجانبية في الشيفرة البرمجية المُنفَّذة داخل العامل نفسه، مثل عند إضافة شيئًا ما لمتغير استنادًا على نتائج الشَرطية.
 
قبل إعادة التصميم، تأكد من أن الشرطية لا تملك أي "آثار جانبية" أو تُعدِّل شيئًا خلاف ذلك، بدلًا من مجرد إعادة القيم. قد تختبئ الآثار الجانبية في الشيفرة البرمجية المُنفَّذة داخل العامل نفسه، مثل عند إضافة شيئًا ما لمتغير استنادًا على نتائج الشَرطية.
# وحِّد الشرطية في تعبير واحد باستخدام and و or. وكقاعدة عامة عند توحيد:
+
# وحِّد الشرطية في تعبير واحد باستخدام <code>and</code> و <code>or</code>. وكقاعدة عامة عند توحيد:
#* تُضم الشرطيات المتداخلة باستخدام and.
+
#* تُضم الشرطيات المتداخلة باستخدام <code>and</code>.
#* تُضم الشرطيات المتتابعة باستخدام or.
+
#* تُضم الشرطيات المتتابعة باستخدام <code>or</code>.
 
# نفِّذ [[Refactoring/extract method|استخراج التوابع (Extract Methods)]] علي شروط العامل واعطِه اسم يعكس الغرض من التعبير.
 
# نفِّذ [[Refactoring/extract method|استخراج التوابع (Extract Methods)]] علي شروط العامل واعطِه اسم يعكس الغرض من التعبير.
  
 
== انظر أيضًا ==
 
== انظر أيضًا ==
 
* [[Refactoring/extract method|استخراج التوابع (Extract Methods)]].
 
* [[Refactoring/extract method|استخراج التوابع (Extract Methods)]].
* [[Refactoring/duplicate code|تكرار الشيفرات (Duplicate Code)]]
+
* [[Refactoring/duplicate code|تكرار الشيفرات (Duplicate Code)]].
  
 
== مصادر ==
 
== مصادر ==

مراجعة 22:42، 28 نوفمبر 2018

المشكلة

وجود عدة شَرطيات تؤدي إلى نفس النتيجة أو الإجراء.

الحل

توحيد جميع هذه الشَرطيات في تعبير وحيد.

مثال

قبل إعادة التصميم

في لغة Java:

double disabilityAmount() {
  if (seniority < 2) {
    return 0;
  }
  if (monthsDisabled > 12) {
    return 0;
  }
  if (isPartTime) {
    return 0;
  }
  // compute the disability amount
  //...
}

في لغة C#‎:

double DisabilityAmount() 
{
  if (seniority < 2) 
  {
    return 0;
  }
  if (monthsDisabled > 12) 
  {
    return 0;
  }
  if (isPartTime) 
  {
    return 0;
  }
  // compute the disability amount
  //...
}

في لغة PHP:

function disabilityAmount() {
  if ($this->seniority < 2) return 0;
  if ($this->monthsDisabled > 12) return 0;
  if ($this->isPartTime) return 0;
  // compute the disability amount
  ...

في لغة Python:

def disabilityAmount():
    if seniority < 2:
        return 0
    if monthsDisabled > 12:
        return 0
    if isPartTime:
        return 0
    # compute the disability amount
    #...

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

في لغة Java:

double disabilityAmount() {
  if (isNotEligableForDisability()) {
    return 0;
  }
  // compute the disability amount
  //...
}

في لغة C#‎:

double DisabilityAmount() 
{
  if (IsNotEligableForDisability()) 
  {
    return 0;
  }
  // compute the disability amount
  //...
}

في لغة PHP:

function disabilityAmount() {
  if ($this->isNotEligableForDisability()) return 0;
  // compute the disability amount
  ...

في لغة Python:

def disabilityAmount():
    if isNotEligableForDisability():
        return 0
    # compute the disability amount
    #...

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

تحتوي الشيفرة البرمجية على العديد من العوامل المتناوبة التي تنفذ إجراءات متطابقة. ومن غير الواضح لماذا تنقسم هذه العوامل.

الغرض الرئيسي من التوحيد هو استخراج الشرطيات إلى توابع منفصلة لزيادة الوضوح.

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

  • إزالة تكرار الشيفرة البرمجية لتدفق التحكم. إذ يساعد الجمع بين العديد من الشرطيات التي لها نفس "الوجهة" على إظهار أنك تجري اختبار واحد فقط معقد يقود إلى إجراء واحد.
  • بتوحيد جميع العوامل، يمكن الآن عزل هذا التعبير المُعقَّد في تابع جديد له اسم يفسر الغرض من الشَرطية.

آلية الحل

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

  1. وحِّد الشرطية في تعبير واحد باستخدام and و or. وكقاعدة عامة عند توحيد:
    • تُضم الشرطيات المتداخلة باستخدام and.
    • تُضم الشرطيات المتتابعة باستخدام or.
  2. نفِّذ استخراج التوابع (Extract Methods) علي شروط العامل واعطِه اسم يعكس الغرض من التعبير.

انظر أيضًا

مصادر