---
title: "إزالة التعيينات للمعاملات (Remove Assignments to Parameters)"
type: "refactoring-technique"
slug: "remove-assignments-to-parameters"
url: "http://localhost:3000/ar/remove-assignments-to-parameters.md"
category: "تركيب التوابع"
description: "المشكلة: يتم تعيين قيمة معينة لمعامل داخل متن التابع. الحل: استخدم متغيراً محلياً بدلاً من المعامل."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# إزالة التعيينات للمعاملات (Remove Assignments to Parameters)

> المشكلة: يتم تعيين قيمة معينة لمعامل داخل متن التابع. الحل: استخدم متغيراً محلياً بدلاً من المعامل.

## المشكلة

يتم تعيين قيمة معينة لمعامل داخل متن التابع.

## الحل

استخدم متغيراً محلياً بدلاً من المعامل.

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

أسباب إعادة الهيكلة هذه هي نفس أسباب تقنية [تقسيم المتغير المؤقت (Split Temporary Variable)](/split-temporary-variable), ولكن في هذه الحالة نحن نتعامل مع معامل وليس مع متغير محلي.

أولاً، إذا تم تمرير المعامل عن طريق المرجع (By reference)، فبعد تغيير قيمة المعامل داخل التابع، يتم تمرير هذه القيمة إلى المتغير الذي طلب استدعاء هذا التابع. غالباً ما يحدث هذا بشكل عرضي ويؤدي إلى تأثيرات غير مرغوب فيها. وحتى إذا كانت المعاملات تُمرر عادةً بالقيمة (By value) (وليس بالمرجع) في لغة البرمجة الخاصة بك، فإن هذه الطريقة في البرمجة قد تبدو غريبة لمن لم يعتد عليها.

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

## الفوائد

* يجب أن يكون كل عنصر في البرنامج مسؤولاً عن شيء واحد فقط. يجعل هذا صيانة الكود أسهل بكثير في المستقبل، حيث يمكنك استبدال الكود بأمان دون أي آثار جانبية.
* تساعد إعادة الهيكلة هذه في استخراج [الكود المتكرر إلى توابع منفصلة](/extract-method).

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

1. أنشئ متغيراً محلياً وعيّن له القيمة الأولية للمعامل الخاص بك.
2. في كل الكود اللاحق لهذا السطر في التابع، استبدل المعامل بالمتغير المحلي الجديد.
## Relations

**Helps you do**

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

**Similar techniques**

- [تقسيم المتغير المؤقت](/ar/split-temporary-variable.md)

## Code Examples

### java

```java
// Before
int discount(int inputVal, int quantity) {
  if (quantity > 50) {
    inputVal -= 2;
  }
  // ...
}

// After
int discount(int inputVal, int quantity) {
  int result = inputVal;
  if (quantity > 50) {
    result -= 2;
  }
  // ...
}
```

### csharp

```csharp
// Before
int Discount(int inputVal, int quantity) 
{
  if (quantity > 50) 
  {
    inputVal -= 2;
  }
  // ...
}

// After
int Discount(int inputVal, int quantity) 
{
  int result = inputVal;
  
  if (quantity > 50) 
  {
    result -= 2;
  }
  // ...
}
```

### php

```php
// Before
function discount($inputVal, $quantity) {
  if ($quantity > 50) {
    $inputVal -= 2;
  }
  ...

// After
function discount($inputVal, $quantity) {
  $result = $inputVal;
  if ($quantity > 50) {
    $result -= 2;
  }
  ...
```

### python

```python
// Before
def discount(inputVal, quantity):
    if quantity > 50:
        inputVal -= 2
    # ...

// After
def discount(inputVal, quantity):
    result = inputVal
    if quantity > 50:
        result -= 2
    # ...
```

### typescript

```typescript
// Before
discount(inputVal: number, quantity: number): number {
  if (quantity > 50) {
    inputVal -= 2;
  }
  // ...
}

// After
discount(inputVal: number, quantity: number): number {
  let result = inputVal;
  if (quantity > 50) {
    result -= 2;
  }
  // ...
}
```

