استبدال المعامل بدوال صريحة.
المشكلة
تنقسم الدالة إلى أجزاء، يتم تشغيل كل منها اعتمادًا على قيمة معامل (parameter).
الحل
استخلص الأجزاء الفردية من الدالة إلى دوال خاصة بها واستدعها بدلاً من الدالة الأصلية.
##مثال
قبل
void setValue(String name, int value) {
if (name.equals("height")) {
height = value;
return;
}
if (name.equals("width")) {
width = value;
return;
}
Assert.shouldNeverReachHere();
}بعد
void setHeight(int arg) {
height = arg;
}
void setWidth(int arg) {
width = arg;
}##لماذا نعيد الهيكلة
تضخمت دالة تحتوي على متغيرات معتمدة على المعاملات بشكل كبير. ويتم تشغيل كود معقد في كل فرع، وتضاف متغيرات جديدة نادرًا جدًا.
##الفوائد
- يحسن مقروئية الكود. من الأسهل بكثير فهم الغرض من
startEngine()بدلاً منsetValue("engineEnabled", true).
##كيفية إعادة الهيكلة
-
لكل متغير من متغيرات الدالة، أنشئ دالة منفصلة. قم بتشغيل هذه الدوال بناءً على قيمة المعامل في الدالة الرئيسية.
-
ابحث عن جميع الأماكن التي يتم فيها استدعاء الدالة الأصلية. وفي هذه الأماكن، ضع استدعاءً لأحد المتغيرات الجديدة المعتمدة على المعامل.
-
عندما لا تتبقى أي استدعاءات للدالة الأصلية، قم بحذفها.