ConstructiCat Logo
CodeBust.
Browse section ▾

استبدال المعامل باستدعاء دالة.

Problem

استدعاء دالة استعلام وتمرير نتائجها كمعاملات لدالة أخرى، في حين أن هذه الدالة يمكنها استدعاء الاستعلام مباشرة.

Solution

بدلاً من تمرير القيمة عبر معامل، حاول وضع استدعاء الاستعلام داخل جسم الدالة.

##Example

Before
int basePrice = quantity * itemPrice;
double seasonDiscount = this.getSeasonalDiscount();
double fees = this.getFees();
double finalPrice = discountedPrice(basePrice, seasonDiscount, fees);
After
int basePrice = quantity * itemPrice;
double finalPrice = discountedPrice(basePrice);

##Why Refactor

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

##Benefits

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

##How to Refactor

  1. تأكد من أن كود الحصول على القيمة لا يستخدم معاملات من الدالة الحالية، لأنها لن تكون متاحة من داخل دالة أخرى. إذا كان الأمر كذلك، فإن نقل الكود غير ممكن.

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

  3. في كود الدالة الرئيسية، استبدل جميع الإشارات إلى المعامل الذي يتم استبداله باستدعاءات للدالة التي تجلب القيمة.

  4. استخدم إزالة المعامل (Remove Parameter) للتخلص من المعامل الذي لم يعد مستخدمًا الآن.