---
title: "Substituir Parâmetro por Chamada de Método"
type: "refactoring-technique"
slug: "replace-parameter-with-method-call"
url: "http://localhost:3000/pt-br/replace-parameter-with-method-call.md"
category: "Simplifying Method Calls"
description: "Problema: chamar um método de consulta e passar seus resultados como parâmetros de outro método, quando esse método poderia chamar a consulta diretamente. Solução: em vez de passar o valor por meio de um parâmetro, tente colocar a chamada de consulta dentro do corpo do método."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Substituir Parâmetro por Chamada de Método

> Problema: chamar um método de consulta e passar seus resultados como parâmetros de outro método, quando esse método poderia chamar a consulta diretamente. Solução: em vez de passar o valor por meio de um parâmetro, tente colocar a chamada de consulta dentro do corpo do método.

## Problem

Chamar um método de consulta e passar seus resultados como parâmetros de outro método, quando esse método poderia chamar a consulta diretamente.

## Solution

Em vez de passar o valor por meio de um parâmetro, tente colocar a chamada de consulta dentro do corpo do método.

## Why Refactor

Uma longa lista de parâmetros é difícil de entender. Além disso, chamadas a esses métodos muitas vezes lembram uma série de cascatas, com cálculos de valores sinuosos e vertiginosos que são difíceis de acompanhar, mas que precisam ser passados ao método. Portanto, se o valor de um parâmetro pode ser calculado com a ajuda de um método, faça isso dentro do próprio método e livre-se do parâmetro.

## Benefits

* Eliminamos parâmetros desnecessários e simplificamos as chamadas de método. Esses parâmetros muitas vezes são criados não para o projeto como ele é agora, mas pensando em necessidades futuras que talvez nunca cheguem.

## How to Refactor

1. Certifique-se de que o código que obtém o valor não usa parâmetros do método atual, pois eles ficarão indisponíveis de dentro de outro método. Se usar, mover o código não é possível.
2. Se o código relevante for mais complicado do que uma única chamada de método ou função, use [Extrair Método](/pt-br/extract-method) para isolar esse código em um novo método e tornar a chamada simples.
3. No código do método principal, substitua todas as referências ao parâmetro que está sendo substituído por chamadas ao método que obtém o valor.
4. Use [Remover Parâmetro](/pt-br/remove-parameter) para eliminar o parâmetro agora sem uso.
## Code Examples

### java

```java
// Before
int basePrice = quantity * itemPrice;
double seasonDiscount = this.getSeasonalDiscount();
double fees = this.getFees();
double finalPrice = discountedPrice(basePrice, seasonDiscount, fees);

// After
int basePrice = quantity * itemPrice;
double finalPrice = discountedPrice(basePrice);
```

### csharp

```csharp
// Before
int basePrice = quantity * itemPrice;
double seasonDiscount = this.GetSeasonalDiscount();
double fees = this.GetFees();
double finalPrice = DiscountedPrice(basePrice, seasonDiscount, fees);

// After
int basePrice = quantity * itemPrice;
double finalPrice = DiscountedPrice(basePrice);
```

### php

```php
// Before
$basePrice = $this->quantity * $this->itemPrice;
$seasonDiscount = $this->getSeasonalDiscount();
$fees = $this->getFees();
$finalPrice = $this->discountedPrice($basePrice, $seasonDiscount, $fees);

// After
$basePrice = $this->quantity * $this->itemPrice;
$finalPrice = $this->discountedPrice($basePrice);
```

### python

```python
// Before
basePrice = quantity * itemPrice
seasonalDiscount = self.getSeasonalDiscount()
fees = self.getFees()
finalPrice = discountedPrice(basePrice, seasonalDiscount, fees)

// After
basePrice = quantity * itemPrice
finalPrice = discountedPrice(basePrice)
```

### typescript

```typescript
// Before
let basePrice = quantity * itemPrice;
const seasonDiscount = this.getSeasonalDiscount();
const fees = this.getFees();
const finalPrice = discountedPrice(basePrice, seasonDiscount, fees);

// After
let basePrice = quantity * itemPrice;
let finalPrice = discountedPrice(basePrice);
```

