ConstructiCat Logo
CodeBust.
Browse section ▾

استبدال المعامل بدوال صريحة.

Problem

تنقسم الدالة إلى أجزاء، يتم تشغيل كل منها اعتمادًا على قيمة معامل (parameter).

Solution

استخلص الأجزاء الفردية من الدالة إلى دوال خاصة بها واستدعها بدلاً من الدالة الأصلية.

##Example

Before
void setValue(String name, int value) {
  if (name.equals("height")) {
    height = value;
    return;
  }
  if (name.equals("width")) {
    width = value;
    return;
  }
  Assert.shouldNeverReachHere();
}
After
void setHeight(int arg) {
  height = arg;
}
void setWidth(int arg) {
  width = arg;
}

##Why Refactor

تضخمت دالة تحتوي على متغيرات معتمدة على المعاملات بشكل كبير. ويتم تشغيل كود معقد في كل فرع، وتضاف متغيرات جديدة نادرًا جدًا.

##Benefits

  • يحسن مقروئية الكود. من الأسهل بكثير فهم الغرض من startEngine() بدلاً من setValue("engineEnabled", true).

##How to Refactor

  1. لكل متغير من متغيرات الدالة، أنشئ دالة منفصلة. قم بتشغيل هذه الدوال بناءً على قيمة المعامل في الدالة الرئيسية.

  2. ابحث عن جميع الأماكن التي يتم فيها استدعاء الدالة الأصلية. وفي هذه الأماكن، ضع استدعاءً لأحد المتغيرات الجديدة المعتمدة على المعامل.

  3. عندما لا تتبقى أي استدعاءات للدالة الأصلية، قم بحذفها.