---
title: "Décomposer une condition"
type: "refactoring-technique"
slug: "decompose-conditional"
url: "http://localhost:3000/fr/decompose-conditional.md"
category: "Simplifying Conditional Expressions"
description: "Problème : Vous avez une condition complexe (if-then/else ou switch). Solution : Décomposez les parties compliquées de la condition en méthodes distinctes : la condition, le then et le else."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Décomposer une condition

> Problème : Vous avez une condition complexe (if-then/else ou switch). Solution : Décomposez les parties compliquées de la condition en méthodes distinctes : la condition, le then et le else.

## Problem

Vous avez une condition complexe (`if-then`/`else` ou `switch`).

## Solution

Décomposez les parties compliquées de la condition en méthodes distinctes : la condition, le `then` et le `else`.

## Why Refactor

Plus un morceau de code est long, plus il est difficile à comprendre. Les choses deviennent encore plus difficiles à comprendre lorsque le code est rempli de conditions :

* Pendant que vous cherchez à comprendre ce que fait le code du bloc `then`, vous oubliez quelle était la condition concernée.
* Pendant que vous analysez le `else`, vous oubliez ce que fait le code du `then`.

## Benefits

* En extrayant le code conditionnel vers des méthodes clairement nommées, vous facilitez la vie de la personne qui maintiendra le code plus tard (comme vous, dans deux mois !).
* Cette technique de refactorisation s'applique aussi aux expressions courtes dans les conditions. La chaîne `isSalaryDay()` est bien plus jolie et descriptive que du code de comparaison de dates.

## How to Refactor

1. Extrayez la condition dans une méthode distincte via [Extraire une méthode](/fr/extract-method).
2. Répétez le processus pour les blocs `then` et `else`.
## Relations

**Eliminates smells**

- [Méthode longue](/fr/smells/long-method.md)

## Code Examples

### java

```java
// Before
if (date.before(SUMMER_START) || date.after(SUMMER_END)) {
  charge = quantity * winterRate + winterServiceCharge;
}
else {
  charge = quantity * summerRate;
}

// After
if (isSummer(date)) {
  charge = summerCharge(quantity);
}
else {
  charge = winterCharge(quantity);
}
```

### csharp

```csharp
// Before
if (date < SUMMER_START || date > SUMMER_END) 
{
  charge = quantity * winterRate + winterServiceCharge;
}
else 
{
  charge = quantity * summerRate;
}

// After
if (isSummer(date))
{
  charge = SummerCharge(quantity);
}
else 
{
  charge = WinterCharge(quantity);
}
```

### php

```php
// Before
if ($date->before(SUMMER_START) || $date->after(SUMMER_END)) {
  $charge = $quantity * $winterRate + $winterServiceCharge;
} else {
  $charge = $quantity * $summerRate;
}

// After
if (isSummer($date)) {
  $charge = summerCharge($quantity);
} else {
  $charge = winterCharge($quantity);
}
```

### python

```python
// Before
if date.before(SUMMER_START) or date.after(SUMMER_END):
    charge = quantity * winterRate + winterServiceCharge
else:
    charge = quantity * summerRate

// After
if isSummer(date):
    charge = summerCharge(quantity)
else:
    charge = winterCharge(quantity)
```

### typescript

```typescript
// Before
if (date.before(SUMMER_START) || date.after(SUMMER_END)) {
  charge = quantity * winterRate + winterServiceCharge;
}
else {
  charge = quantity * summerRate;
}

// After
if (isSummer(date)) {
  charge = summerCharge(quantity);
}
else {
  charge = winterCharge(quantity);
}
```

