---
title: "Remplacer une variable temporaire par une requête"
type: "refactoring-technique"
slug: "replace-temp-with-query"
url: "http://localhost:3000/fr/replace-temp-with-query.md"
category: "Composing Methods"
description: "Problème : vous placez le résultat d'une expression dans une variable locale pour l'utiliser plus tard dans votre code. Solution : déplacez l'expression entière dans une méthode distincte et renvoyez-en le résultat. Interrogez la méthode au lieu d'utiliser une variable. Intégrez la nouvelle méthode dans d'autres méthodes si nécessaire."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Remplacer une variable temporaire par une requête

> Problème : vous placez le résultat d'une expression dans une variable locale pour l'utiliser plus tard dans votre code. Solution : déplacez l'expression entière dans une méthode distincte et renvoyez-en le résultat. Interrogez la méthode au lieu d'utiliser une variable. Intégrez la nouvelle méthode dans d'autres méthodes si nécessaire.

## Problem

Vous placez le résultat d'une expression dans une variable locale pour l'utiliser plus tard dans votre code.

## Solution

Déplacez l'expression entière dans une méthode distincte et renvoyez-en le résultat. Interrogez la méthode au lieu d'utiliser une variable. Intégrez la nouvelle méthode dans d'autres méthodes si nécessaire.

## Why Refactor

Ce refactoring peut poser les bases de l'application d'[Extraire une méthode](/fr/extract-method) sur une portion d'une méthode très longue.

La même expression peut parfois se retrouver dans d'autres méthodes également, ce qui est une raison d'envisager la création d'une méthode commune.

## Benefits

* Lisibilité du code. Il est bien plus facile de comprendre le but de la méthode `getTax()` que celui de la ligne `orderPrice() * 0.2`.
* Du code plus léger grâce à la déduplication, si la ligne remplacée est utilisée dans plusieurs méthodes.

## How to Refactor

1. Assurez-vous qu'une valeur est affectée à la variable une fois et une seule au sein de la méthode. Si ce n'est pas le cas, utilisez [Scinder une variable temporaire](/fr/split-temporary-variable) pour garantir que la variable ne servira qu'à stocker le résultat de votre expression.
2. Utilisez [Extraire une méthode](/fr/extract-method) pour placer l'expression concernée dans une nouvelle méthode. Assurez-vous que cette méthode ne fait que renvoyer une valeur et ne modifie pas l'état de l'objet. Si la méthode affecte l'état visible de l'objet, utilisez [Séparer la requête du modificateur](/fr/separate-query-from-modifier).
3. Remplacez la variable par une requête vers votre nouvelle méthode.
## Relations

**Similar techniques**

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

**Eliminates smells**

- [Méthode longue](/fr/smells/long-method.md)
- [Code dupliqué](/fr/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;
}
```

