ConstructiCat Logo
CodeBust.
Browse section ▾

استخراج الدالة.

Problem

لديك جزء من الكود يمكن تجميعه معاً.

Solution

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

##Example

Before
void printOwing() {
  printBanner();

  // طباعة التفاصيل.
  System.out.println("name: " + name);
  System.out.println("amount: " + getOutstanding());
}
After
void printOwing() {
  printBanner();
  printDetails(getOutstanding());
}

void printDetails(double outstanding) {
  System.out.println("name: " + name);
  System.out.println("amount: " + outstanding);
}

##Why Refactor

كلما زادت السطور الموجودة في الدالة، زادت صعوبة معرفة ما تفعله. هذا هو السبب الرئيسي لإعادة الهيكلة هذه.

بالإضافة إلى التخلص من التعقيد في الكود الخاص بك، فإن استخراج الدوال يعد أيضاً خطوة في العديد من أساليب إعادة الهيكلة الأخرى.

##Benefits

  • كود أكثر قابلية للقراءة! تأكد من إعطاء الدالة الجديدة اسماً يصف الغرض منها مثل: createOrder() أو renderCustomerInfo()، إلخ.

  • تكرار أقل للكود. غالباً ما يمكن إعادة استخدام الكود الموجود في الدالة في أماكن أخرى من برنامجك. لذا يمكنك استبدال التكرارات باستدعاءات لدالتك الجديدة.

  • يعزل أجزاء مستقلة من الكود، مما يقلل من احتمالية حدوث أخطاء (مثل تعديل متغير خاطئ).

##How to Refactor

  1. أنشئ دالة جديدة وامنحها اسماً يوضح الغرض منها بشكل جلي.

  2. انسخ جزء الكود المعني إلى دالتك الجديدة. احذف هذا الجزء من مكانه القديم وضع استدعاء للدالة الجديدة هناك بدلاً منه.

    ابحث عن جميع المتغيرات المستخدمة في هذا الجزء من الكود. إذا كانت معلنة داخل هذا الجزء ولم تُستخدم خارجه، فما عليك سوى تركها دون تغيير—ستصبح متغيرات محلية (local variables) للدالة الجديدة.

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

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