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

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

## المشكلة

لديك تعبير برمجى يصعب فهمه.

## الحل

ضع نتيجة التعبير أو أجزائه في متغيرات منفصلة توضح نفسها بنفسها.

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

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

* شرط معامل `if()` أو جزء من معامل `?:` في اللغات القائمة على C
* تعبير حسابي طويل بدون نتائج وسيطة
* سطور طويلة متعددة الأجزاء

قد يكون استخراج متغير خطوة أولى نحو تطبيق [استخراج الدالة](/extract-method) إذا رأيت أن التعبير المستخرج مستخدم في أماكن أخرى في الكود الخاص بك.

## الفوائد

* كود أكثر قابلية للقراءة! حاول إعطاء المتغيرات المستخرجة أسماء جيدة توضح الغرض من المتغير بصوت عالٍ وواضح. قراءة أفضل، وتعليقات مطولة أقل. اختر أسماء مثل `customerTaxValue`، و `cityUnemploymentRate`، و `clientSalutationString`، إلخ.

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

1. أدخل سطراً جديداً قبل التعبير المعني وأعلن عن متغير جديد هناك. قم بتعيين جزء من التعبير المعقد لهذا المتغير.
2. استبدل هذا الجزء من التعبير بالمتغير الجديد.
3. كرر العملية لجميع الأجزاء المعقدة من التعبير.
## Relations

**Similar techniques**

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

**Opposite refactorings**

- [تضمين المتغير المؤقت (Inline Temp)](/ar/inline-temp.md)

**Eliminates smells**

- [التعليقات](/ar/smells/comments.md)

## Code Examples

### java

```java
// Before
void renderBanner() {
  if ((platform.toUpperCase().indexOf("MAC") > -1) &&
       (browser.toUpperCase().indexOf("IE") > -1) &&
        wasInitialized() && resize > 0 )
  {
    // افعل شيئاً ما
  }
}

// After
void renderBanner() {
  final boolean isMacOs = platform.toUpperCase().indexOf("MAC") > -1;
  final boolean isIE = browser.toUpperCase().indexOf("IE") > -1;
  final boolean wasResized = resize > 0;

  if (isMacOs && isIE && wasInitialized() && wasResized) {
    // افعل شيئاً ما
  }
}
```

### csharp

```csharp
// Before
void RenderBanner() 
{
  if ((platform.ToUpper().IndexOf("MAC") > -1) &&
       (browser.ToUpper().IndexOf("IE") > -1) &&
        wasInitialized() && resize > 0 )
  {
    // افعل شيئاً ما
  }
}

// After
void RenderBanner() 
{
  readonly bool isMacOs = platform.ToUpper().IndexOf("MAC") > -1;
  readonly bool isIE = browser.ToUpper().IndexOf("IE") > -1;
  readonly bool wasResized = resize > 0;

  if (isMacOs && isIE && wasInitialized() && wasResized) 
  {
    // افعل شيئاً ما
  }
}
```

### php

```php
// Before
if (($platform->toUpperCase()->indexOf("MAC") > -1) &&
     ($browser->toUpperCase()->indexOf("IE") > -1) &&
      $this->wasInitialized() && $this->resize > 0)
{
  // do something
}

// After
$isMacOs = $platform->toUpperCase()->indexOf("MAC") > -1;
$isIE = $browser->toUpperCase()->indexOf("IE")  > -1;
$wasResized = $this->resize > 0;

if ($isMacOs && $isIE && $this->wasInitialized() && $wasResized) {
  // افعل شيئاً ما
}
```

### python

```python
// Before
def renderBanner(self):
    if (self.platform.toUpperCase().indexOf("MAC") > -1) and \
       (self.browser.toUpperCase().indexOf("IE") > -1) and \
       self.wasInitialized() and (self.resize > 0):
        # do something

// After
def renderBanner(self):
    isMacOs = self.platform.toUpperCase().indexOf("MAC") > -1
    isIE = self.browser.toUpperCase().indexOf("IE") > -1
    wasResized = self.resize > 0

    if isMacOs and isIE and self.wasInitialized() and wasResized:
        # افعل شيئاً ما
```

### typescript

```typescript
// Before
renderBanner(): void {
  if ((platform.toUpperCase().indexOf("MAC") > -1) &&
       (browser.toUpperCase().indexOf("IE") > -1) &&
        wasInitialized() && resize > 0 )
  {
    // افعل شيئاً ما
  }
}

// After
renderBanner(): void {
  const isMacOs = platform.toUpperCase().indexOf("MAC") > -1;
  const isIE = browser.toUpperCase().indexOf("IE") > -1;
  const wasResized = resize > 0;

  if (isMacOs && isIE && wasInitialized() && wasResized) {
    // افعل شيئاً ما
  }
}
```

