---
title: "Remover Atribuições a Parâmetros"
type: "refactoring-technique"
slug: "remove-assignments-to-parameters"
url: "http://localhost:3000/pt-br/remove-assignments-to-parameters.md"
category: "Composing Methods"
description: "Problema: Algum valor é atribuído a um parâmetro dentro do corpo do método. Solução: Use uma variável local em vez de um parâmetro."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Remover Atribuições a Parâmetros

> Problema: Algum valor é atribuído a um parâmetro dentro do corpo do método. Solução: Use uma variável local em vez de um parâmetro.

## Problem

Algum valor é atribuído a um parâmetro dentro do corpo do método.

## Solution

Use uma variável local em vez de um parâmetro.

## Why Refactor

Os motivos para essa refatoração são os mesmos de [Separar Variável Temporária](/pt-br/split-temporary-variable), mas neste caso estamos lidando com um parâmetro, e não com uma variável local.

Primeiro, se um parâmetro é passado por referência, então, depois que o valor do parâmetro é alterado dentro do método, esse valor é repassado ao argumento que solicitou a chamada desse método. Muitas vezes isso acontece por acidente e leva a efeitos indesejados. Mesmo que, na sua linguagem de programação, os parâmetros normalmente sejam passados por valor (e não por referência), essa peculiaridade de codificação pode incomodar quem não está acostumado a ela.

Segundo, várias atribuições de valores diferentes a um único parâmetro dificultam saber quais dados o parâmetro deveria conter em determinado momento. O problema piora se o seu parâmetro e seu conteúdo estão documentados, mas o valor real pode diferir do que se espera dentro do método.

## Benefits

* Cada elemento do programa deve ser responsável por apenas uma coisa. Isso facilita muito a manutenção do código daqui para frente, já que você pode substituir o código com segurança, sem efeitos colaterais.
* Essa refatoração ajuda a extrair [código repetitivo para métodos separados](/pt-br/extract-method).

## How to Refactor

1. Crie uma variável local e atribua a ela o valor inicial do seu parâmetro.
2. Em todo o código do método que vem após essa linha, substitua o parâmetro pela sua nova variável local.
## Relations

**Helps you do**

- [Extrair Método](/pt-br/extract-method.md)

**Similar techniques**

- [Dividir Variável Temporária](/pt-br/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;
  }
  // ...
}
```

