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

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

## المشكلة

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

## الحل

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

## لماذا نقوم بإعادة الهيكلة

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

## الفوائد

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

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

1. تأكد من أن كود الحصول على القيمة لا يستخدم معاملات من الدالة الحالية، لأنها لن تكون متاحة من داخل دالة أخرى. إذا كان الأمر كذلك، فإن نقل الكود غير ممكن.
2. إذا كان الكود ذو الصلة أكثر تعقيدًا من مجرد استدعاء دالة واحدة، فاستخدم [استخلاص الدالة](/extract-method) لعزل هذا الكود في دالة جديدة وجعل الاستدعاء بسيطًا.
3. في كود الدالة الرئيسية، استبدل جميع الإشارات إلى المعامل الذي يتم استبداله باستدعاءات للدالة التي تجلب القيمة.
4. استخدم [إزالة المعامل](/remove-parameter) للتخلص من المعامل الذي لم يعد مستخدمًا الآن.
## Code Examples

### java

```java
// 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);
```

### csharp

```csharp
// 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);
```

### php

```php
// Before
$basePrice = $this->quantity * $this->itemPrice;
$seasonDiscount = $this->getSeasonalDiscount();
$fees = $this->getFees();
$finalPrice = $this->discountedPrice($basePrice, $seasonDiscount, $fees);

// After
$basePrice = $this->quantity * $this->itemPrice;
$finalPrice = $this->discountedPrice($basePrice);
```

### python

```python
// Before
basePrice = quantity * itemPrice
seasonalDiscount = self.getSeasonalDiscount()
fees = self.getFees()
finalPrice = discountedPrice(basePrice, seasonalDiscount, fees)

// After
basePrice = quantity * itemPrice
finalPrice = discountedPrice(basePrice)
```

### typescript

```typescript
// Before
let basePrice = quantity * itemPrice;
const seasonDiscount = this.getSeasonalDiscount();
const fees = this.getFees();
const finalPrice = discountedPrice(basePrice, seasonDiscount, fees);

// After
let basePrice = quantity * itemPrice;
let finalPrice = discountedPrice(basePrice);
```

