---
title: "Eliminar Asignaciones a Parámetros"
type: "refactoring-technique"
slug: "remove-assignments-to-parameters"
url: "http://localhost:3000/es/remove-assignments-to-parameters.md"
category: "Composing Methods"
description: "Problema: Se asigna algún valor a un parámetro dentro del cuerpo del método. Solución: Usa una variable local en lugar de un parámetro."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Eliminar Asignaciones a Parámetros

> Problema: Se asigna algún valor a un parámetro dentro del cuerpo del método. Solución: Usa una variable local en lugar de un parámetro.

## Problem

Se asigna algún valor a un parámetro dentro del cuerpo del método.

## Solution

Usa una variable local en lugar de un parámetro.

## Why Refactor

Las razones para esta refactorización son las mismas que para [Dividir Variable Temporal](/es/split-temporary-variable), pero en este caso se trata de un parámetro, no de una variable local.

Primero, si un parámetro se pasa por referencia, entonces, después de cambiar el valor del parámetro dentro del método, ese valor se pasa al argumento que solicitó la llamada a este método. Muy a menudo esto ocurre de forma accidental y conduce a efectos desafortunados. Aunque los parámetros normalmente se pasen por valor (y no por referencia) en tu lenguaje de programación, esta peculiaridad de codificación puede desconcertar a quienes no están acostumbrados a ella.

Segundo, las múltiples asignaciones de valores distintos a un mismo parámetro te dificultan saber qué datos debería contener el parámetro en un momento concreto. El problema empeora si tu parámetro y su contenido están documentados pero el valor real puede diferir de lo que se espera dentro del método.

## Benefits

* Cada elemento del programa debería ser responsable de una sola cosa. Esto facilita mucho el mantenimiento del código en el futuro, ya que puedes reemplazar código de forma segura sin efectos secundarios.
* Esta refactorización ayuda a extraer [código repetitivo a métodos separados](/es/extract-method).

## How to Refactor

1. Crea una variable local y asígnale el valor inicial de tu parámetro.
2. En todo el código del método que siga a esta línea, reemplaza el parámetro con tu nueva variable local.
## Relations

**Helps you do**

- [Extraer método](/es/extract-method.md)

**Similar techniques**

- [Dividir variable temporal](/es/split-temporary-variable.md)

## Code Examples

### java

```java
// Before
int discount(int inputVal, int quantity) {
  if (quantity > 50) {
    inputVal -= 2;
  }
  // ...
}

// After
int discount(int inputVal, int quantity) {
  int result = inputVal;
  if (quantity > 50) {
    result -= 2;
  }
  // ...
}
```

### csharp

```csharp
// Before
int Discount(int inputVal, int quantity) 
{
  if (quantity > 50) 
  {
    inputVal -= 2;
  }
  // ...
}

// After
int Discount(int inputVal, int quantity) 
{
  int result = inputVal;
  
  if (quantity > 50) 
  {
    result -= 2;
  }
  // ...
}
```

### php

```php
// Before
function discount($inputVal, $quantity) {
  if ($quantity > 50) {
    $inputVal -= 2;
  }
  ...

// After
function discount($inputVal, $quantity) {
  $result = $inputVal;
  if ($quantity > 50) {
    $result -= 2;
  }
  ...
```

### python

```python
// Before
def discount(inputVal, quantity):
    if quantity > 50:
        inputVal -= 2
    # ...

// After
def discount(inputVal, quantity):
    result = inputVal
    if quantity > 50:
        result -= 2
    # ...
```

### typescript

```typescript
// Before
discount(inputVal: number, quantity: number): number {
  if (quantity > 50) {
    inputVal -= 2;
  }
  // ...
}

// After
discount(inputVal: number, quantity: number): number {
  let result = inputVal;
  if (quantity > 50) {
    result -= 2;
  }
  // ...
}
```

