---
title: "تضمين التابع (Inline Method)"
type: "refactoring-technique"
slug: "inline-method"
url: "http://localhost:3000/ar/inline-method.md"
category: "تركيب التوابع"
description: "المشكلة: عندما يكون متن التابع أكثر وضوحاً من التابع نفسه، استخدم هذه التقنية. الحل: استبدل استدعاءات التابع بمحتوى التابع واحذف التابع نفسه."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# تضمين التابع (Inline Method)

> المشكلة: عندما يكون متن التابع أكثر وضوحاً من التابع نفسه، استخدم هذه التقنية. الحل: استبدل استدعاءات التابع بمحتوى التابع واحذف التابع نفسه.

## المشكلة

عندما يكون متن التابع أكثر وضوحاً من التابع نفسه، استخدم هذه التقنية.

## الحل

استبدل استدعاءات التابع بمحتوى التابع واحذف التابع نفسه.

## دواعي إعادة الهيكلة

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

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

## الفوائد

* من خلال تقليل عدد التوابع غير الضرورية، فإنك تجعل الكود أكثر وضوحاً وبساطة.

## كيفية إعادة الهيكلة

1. تأكد من أن التابع لم تتم إعادة تعريفه في الفئات الفرعية (Subclasses). إذا تمت إعادة تعريف التابع، فتجنب استخدام هذه التقنية.
2. ابحث عن جميع استدعاءات التابع. واستبدل هذه الاستدعاءات بمحتوى التابع.
3. احذف التابع.
## Relations

**Opposite refactorings**

- [استخراج الدالة](/ar/extract-method.md)

**Eliminates smells**

- [العمومية التخمينية](/ar/smells/speculative-generality.md)

## Code Examples

### java

```java
// Before
class PizzaDelivery {
  // ...
  int getRating() {
    return moreThanFiveLateDeliveries() ? 2 : 1;
  }
  boolean moreThanFiveLateDeliveries() {
    return numberOfLateDeliveries > 5;
  }
}

// After
class PizzaDelivery {
  // ...
  int getRating() {
    return numberOfLateDeliveries > 5 ? 2 : 1;
  }
}
```

### csharp

```csharp
// Before
class PizzaDelivery 
{
  // ...
  int GetRating() 
  {
    return MoreThanFiveLateDeliveries() ? 2 : 1;
  }
  bool MoreThanFiveLateDeliveries() 
  {
    return numberOfLateDeliveries > 5;
  }
}

// After
class PizzaDelivery 
{
  // ...
  int GetRating() 
  {
    return numberOfLateDeliveries > 5 ? 2 : 1;
  }
}
```

### php

```php
// Before
function getRating() {
  return ($this->moreThanFiveLateDeliveries()) ? 2 : 1;
}
function moreThanFiveLateDeliveries() {
  return $this->numberOfLateDeliveries > 5;
}

// After
function getRating() {
  return ($this->numberOfLateDeliveries > 5) ? 2 : 1;
}
```

### python

```python
// Before
class PizzaDelivery:
    # ...
    def getRating(self):
        return 2 if self.moreThanFiveLateDeliveries() else 1
  
    def moreThanFiveLateDeliveries(self):
        return self.numberOfLateDeliveries > 5

// After
class PizzaDelivery:
  # ...
  def getRating(self):
    return 2 if self.numberOfLateDeliveries > 5 else 1
```

### typescript

```typescript
// Before
class PizzaDelivery {
  // ...
  getRating(): number {
    return moreThanFiveLateDeliveries() ? 2 : 1;
  }
  moreThanFiveLateDeliveries(): boolean {
    return numberOfLateDeliveries > 5;
  }
}

// After
class PizzaDelivery {
  // ...
  getRating(): number {
    return numberOfLateDeliveries > 5 ? 2 : 1;
  }
}
```

