ConstructiCat Logo
CodeBust.
Browse section ▾

إزالة التعيينات للمعاملات (Remove Assignments to Parameters).

Problem

يتم تعيين قيمة معينة لمعامل داخل متن التابع.

Solution

استخدم متغيراً محلياً بدلاً من المعامل.

##Example

Before
int discount(int inputVal, int quantity) {
  if (quantity > 50) {
    inputVal -= 2;
  }
  // ...
}
After
int discount(int inputVal, int quantity) {
  int result = inputVal;
  if (quantity > 50) {
    result -= 2;
  }
  // ...
}

##Why Refactor

أسباب إعادة الهيكلة هذه هي نفس أسباب تقنية تقسيم المتغير المؤقت (Split Temporary Variable)، ولكن في هذه الحالة نحن نتعامل مع معامل وليس مع متغير محلي.

أولاً، إذا تم تمرير المعامل عن طريق المرجع (By reference)، فبعد تغيير قيمة المعامل داخل التابع، يتم تمرير هذه القيمة إلى المتغير الذي طلب استدعاء هذا التابع. غالباً ما يحدث هذا بشكل عرضي ويؤدي إلى تأثيرات غير مرغوب فيها. وحتى إذا كانت المعاملات تُمرر عادةً بالقيمة (By value) (وليس بالمرجع) في لغة البرمجة الخاصة بك، فإن هذه الطريقة في البرمجة قد تبدو غريبة لمن لم يعتد عليها.

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

##Benefits

  • يجب أن يكون كل عنصر في البرنامج مسؤولاً عن شيء واحد فقط. يجعل هذا صيانة الكود أسهل بكثير في المستقبل، حيث يمكنك استبدال الكود بأمان دون أي آثار جانبية.

  • تساعد إعادة الهيكلة هذه في استخراج الكود المتكرر إلى توابع منفصلة.

##How to Refactor

  1. أنشئ متغيراً محلياً وعيّن له القيمة الأولية للمعامل الخاص بك.

  2. في كل الكود اللاحق لهذا السطر في التابع، استبدل المعامل بالمتغير المحلي الجديد.