---
title: "Extraire une variable"
type: "refactoring-technique"
slug: "extract-variable"
url: "http://localhost:3000/fr/extract-variable.md"
category: "Composing Methods"
description: "Problème : vous avez une expression difficile à comprendre. Solution : placez le résultat de l'expression ou de ses parties dans des variables distinctes qui se passent d'explication."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Extraire une variable

> Problème : vous avez une expression difficile à comprendre. Solution : placez le résultat de l'expression ou de ses parties dans des variables distinctes qui se passent d'explication.

## Problem

Vous avez une expression difficile à comprendre.

## Solution

Placez le résultat de l'expression ou de ses parties dans des variables distinctes qui se passent d'explication.

## Why Refactor

La principale raison d'extraire des variables est de rendre une expression complexe plus compréhensible, en la divisant en ses parties intermédiaires. Il peut s'agir de :

* La condition de l'opérateur `if()` ou une partie de l'opérateur `?:` dans les langages dérivés du C
* Une longue expression arithmétique sans résultats intermédiaires
* De longues lignes en plusieurs parties

Extraire une variable peut être la première étape vers l'application d'[Extraire une méthode](/fr/extract-method) si vous constatez que l'expression extraite est utilisée à d'autres endroits de votre code.

## Benefits

* Du code plus lisible ! Essayez de donner aux variables extraites de bons noms qui annoncent leur but haut et fort. Plus de lisibilité, moins de commentaires interminables. Privilégiez des noms comme `customerTaxValue`, `cityUnemploymentRate`, `clientSalutationString`, etc.

## How to Refactor

1. Insérez une nouvelle ligne avant l'expression concernée et déclarez-y une nouvelle variable. Affectez-lui une partie de l'expression complexe.
2. Remplacez cette partie de l'expression par la nouvelle variable.
3. Répétez le processus pour toutes les parties complexes de l'expression.
## Relations

**Similar techniques**

- [Extraire une méthode](/fr/extract-method.md)

**Opposite refactorings**

- [Intégrer une variable temporaire](/fr/inline-temp.md)

**Eliminates smells**

- [Commentaires](/fr/smells/comments.md)

## Code Examples

### java

```java
// Before
void renderBanner() {
  if ((platform.toUpperCase().indexOf("MAC") > -1) &&
       (browser.toUpperCase().indexOf("IE") > -1) &&
        wasInitialized() && resize > 0 )
  {
    // do something
  }
}

// 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) {
    // do something
  }
}
```

### csharp

```csharp
// Before
void RenderBanner() 
{
  if ((platform.ToUpper().IndexOf("MAC") > -1) &&
       (browser.ToUpper().IndexOf("IE") > -1) &&
        wasInitialized() && resize > 0 )
  {
    // do something
  }
}

// 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) 
  {
    // do something
  }
}
```

### 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) {
  // do something
}
```

### 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:
        # do something
```

### typescript

```typescript
// Before
renderBanner(): void {
  if ((platform.toUpperCase().indexOf("MAC") > -1) &&
       (browser.toUpperCase().indexOf("IE") > -1) &&
        wasInitialized() && resize > 0 )
  {
    // do something
  }
}

// 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) {
    // do something
  }
}
```

