---
title: "Reemplazar Parámetro con Métodos Explícitos"
type: "refactoring-technique"
slug: "replace-parameter-with-explicit-methods"
url: "http://localhost:3000/es/replace-parameter-with-explicit-methods.md"
category: "Simplifying Method Calls"
description: "Problema: Un método está dividido en partes, cada una de las cuales se ejecuta dependiendo del valor de un parámetro. Solución: Extrae las partes individuales del método en sus propios métodos y llámalos en lugar del método original."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Reemplazar Parámetro con Métodos Explícitos

> Problema: Un método está dividido en partes, cada una de las cuales se ejecuta dependiendo del valor de un parámetro. Solución: Extrae las partes individuales del método en sus propios métodos y llámalos en lugar del método original.

## Problem

Un método está dividido en partes, cada una de las cuales se ejecuta dependiendo del valor de un parámetro.

## Solution

Extrae las partes individuales del método en sus propios métodos y llámalos en lugar del método original.

## Why Refactor

Un método que contiene variantes dependientes de un parámetro ha crecido enormemente. En cada rama se ejecuta código no trivial y las nuevas variantes se añaden muy rara vez.

## Benefits

* Mejora la legibilidad del código. Es mucho más fácil entender el propósito de `startEngine()` que el de `setValue("engineEnabled", true)`.

## How to Refactor

1. Para cada variante del método, crea un método separado. Ejecuta estos métodos según el valor de un parámetro en el método principal.
2. Encuentra todos los lugares donde se llama al método original. En esos lugares, coloca una llamada a una de las nuevas variantes dependientes del parámetro.
3. Cuando no queden llamadas al método original, elimínalo.
## Relations

**Similar techniques**

- [Reemplazar condicional con polimorfismo](/es/replace-conditional-with-polymorphism.md)

**Opposite refactorings**

- [Parametrizar método](/es/parameterize-method.md)

**Eliminates smells**

- [Sentencias switch](/es/smells/switch-statements.md)
- [Método Largo](/es/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"
        # Imprime el banner.
        # ...
    if name == "info"
        # Imprime la información.
        # ...

// After
def outputBanner(self):
    # Imprime el banner.
    # ...

def outputInfo(self):
    # Imprime la información.
    # ...
```

### 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;
}
```

