---
title: "Remplacer un paramètre par des méthodes explicites"
type: "refactoring-technique"
slug: "replace-parameter-with-explicit-methods"
url: "http://localhost:3000/fr/replace-parameter-with-explicit-methods.md"
category: "Simplifying Method Calls"
description: "Problème : Une méthode est divisée en parties, chacune étant exécutée en fonction de la valeur d'un paramètre. Solution : Extrayez les différentes parties de la méthode dans leurs propres méthodes et appelez-les à la place de la méthode d'origine."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Remplacer un paramètre par des méthodes explicites

> Problème : Une méthode est divisée en parties, chacune étant exécutée en fonction de la valeur d'un paramètre. Solution : Extrayez les différentes parties de la méthode dans leurs propres méthodes et appelez-les à la place de la méthode d'origine.

## Problem

Une méthode est divisée en parties, chacune étant exécutée en fonction de la valeur d'un paramètre.

## Solution

Extrayez les différentes parties de la méthode dans leurs propres méthodes et appelez-les à la place de la méthode d'origine.

## Why Refactor

Une méthode contenant des variantes dépendant d'un paramètre est devenue massive. Du code non trivial s'exécute dans chaque branche et de nouvelles variantes sont ajoutées très rarement.

## Benefits

* Améliore la lisibilité du code. Il est bien plus facile de comprendre le but de `startEngine()` que celui de `setValue("engineEnabled", true)`.

## How to Refactor

1. Pour chaque variante de la méthode, créez une méthode distincte. Exécutez ces méthodes en fonction de la valeur d'un paramètre dans la méthode principale.
2. Trouvez tous les endroits où la méthode d'origine est appelée. À ces endroits, placez un appel à l'une des nouvelles variantes dépendant du paramètre.
3. Lorsqu'il ne reste plus aucun appel à la méthode d'origine, supprimez-la.
## Relations

**Similar techniques**

- [Remplacer le conditionnel par du polymorphisme](/fr/replace-conditional-with-polymorphism.md)

**Opposite refactorings**

- [Paramétrer la méthode](/fr/parameterize-method.md)

**Eliminates smells**

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

## Code Examples

### java

```java
// Before
void setValue(String name, int value) {
  if (name.equals("height")) {
    height = value;
    return;
  }
  if (name.equals("width")) {
    width = value;
    return;
  }
  Assert.shouldNeverReachHere();
}

// After
void setHeight(int arg) {
  height = arg;
}
void setWidth(int arg) {
  width = arg;
}
```

### csharp

```csharp
// Before
void SetValue(string name, int value) 
{
  if (name.Equals("height")) 
  {
    height = value;
    return;
  }
  if (name.Equals("width")) 
  {
    width = value;
    return;
  }
  Assert.Fail();
}

// After
void SetHeight(int arg) 
{
  height = arg;
}
void SetWidth(int arg) 
{
  width = arg;
}
```

### php

```php
// Before
function setValue($name, $value) {
  if ($name === "height") {
    $this->height = $value;
    return;
  }
  if ($name === "width") {
    $this->width = $value;
    return;
  }
  assert("Should never reach here");
}

// After
function setHeight($arg) {
  $this->height = $arg;
}
function setWidth($arg) {
  $this->width = $arg;
}
```

### python

```python
// Before
def output(self, name):
    if name == "banner"
        # Affiche la bannière.
        # ...
    if name == "info"
        # Affiche les informations.
        # ...

// After
def outputBanner(self):
    # Affiche la bannière.
    # ...

def outputInfo(self):
    # Affiche les informations.
    # ...
```

### typescript

```typescript
// Before
setValue(name: string, value: number): void {
  if (name.equals("height")) {
    height = value;
    return;
  }
  if (name.equals("width")) {
    width = value;
    return;
  }
  
}

// After
setHeight(arg: number): void {
  height = arg;
}
setWidth(arg: number): number {
  width = arg;
}
```

