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

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

## المشكلة

تضع نتيجة تعبير في متغير محلي لاستخدامه لاحقًا في الكود الخاص بك.

## الحل

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

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

يمكن أن تمهد إعادة الهيكلة هذه الطريق لتطبيق تقنية [استخلاص الدالة](/extract-method) لجزء من دالة طويلة جدًا.

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

## الفوائد

* مقروئية الكود. من الأسهل بكثير فهم الغرض من الدالة `getTax()` بدلاً من السطر `orderPrice() * 0.2`.
* كود أكثر رشاقة عبر إزالة التكرار، إذا كان السطر الذي يتم استبداله مستخدمًا في عدة دوال.

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

1. تأكد من تعيين قيمة للمتغير مرة واحدة ومرة واحدة فقط داخل الدالة. إذا لم يكن الأمر كذلك، فاستخدم [تقسيم المتغير المؤقت](/split-temporary-variable) لضمان استخدام المتغير فقط لتخزين نتيجة تعبيرك.
2. استخدم [استخلاص الدالة](/extract-method) لوضع التعبير المعني في دالة جديدة. تأكد من أن هذه الدالة تعيد قيمة فقط ولا تغير حالة الكائن. إذا كانت الدالة تؤثر على الحالة المرئية للكائن، فاستخدم [فصل الاستعلام عن التعديل](/separate-query-from-modifier).
3. استبدل المتغير باستعلام للدالة الجديدة الخاصة بك.
## Relations

**Similar techniques**

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

**Eliminates smells**

- [الدالة الطويلة](/ar/smells/long-method.md)
- [الكود المكرر](/ar/smells/duplicate-code.md)

## Code Examples

### java

```java
// Before
double calculateTotal() {
  double basePrice = quantity * itemPrice;
  if (basePrice > 1000) {
    return basePrice * 0.95;
  }
  else {
    return basePrice * 0.98;
  }
}

// After
double calculateTotal() {
  if (basePrice() > 1000) {
    return basePrice() * 0.95;
  }
  else {
    return basePrice() * 0.98;
  }
}
double basePrice() {
  return quantity * itemPrice;
}
```

### csharp

```csharp
// Before
double CalculateTotal() 
{
  double basePrice = quantity * itemPrice;
  
  if (basePrice > 1000) 
  {
    return basePrice * 0.95;
  }
  else 
  {
    return basePrice * 0.98;
  }
}

// After
double CalculateTotal() 
{
  if (BasePrice() > 1000) 
  {
    return BasePrice() * 0.95;
  }
  else 
  {
    return BasePrice() * 0.98;
  }
}
double BasePrice() 
{
  return quantity * itemPrice;
}
```

### php

```php
// Before
$basePrice = $this->quantity * $this->itemPrice;
if ($basePrice > 1000) {
  return $basePrice * 0.95;
} else {
  return $basePrice * 0.98;
}

// After
if ($this->basePrice() > 1000) {
  return $this->basePrice() * 0.95;
} else {
  return $this->basePrice() * 0.98;
}

...

function basePrice() {
  return $this->quantity * $this->itemPrice;
}
```

### python

```python
// Before
def calculateTotal():
    basePrice = quantity * itemPrice
    if basePrice > 1000:
        return basePrice * 0.95
    else:
        return basePrice * 0.98

// After
def calculateTotal():
    if basePrice() > 1000:
        return basePrice() * 0.95
    else:
        return basePrice() * 0.98

def basePrice():
    return quantity * itemPrice
```

### typescript

```typescript
// Before
calculateTotal(): number {
  let basePrice = quantity * itemPrice;
  if (basePrice > 1000) {
    return basePrice * 0.95;
  }
  else {
    return basePrice * 0.98;
  }
}

// After
calculateTotal(): number {
  if (basePrice() > 1000) {
    return basePrice() * 0.95;
  }
  else {
    return basePrice() * 0.98;
  }
}
basePrice(): number {
  return quantity * itemPrice;
}
```

