---
title: "Substituir Variável Temporária por Consulta"
type: "refactoring-technique"
slug: "replace-temp-with-query"
url: "http://localhost:3000/pt-br/replace-temp-with-query.md"
category: "Composing Methods"
description: "Problema: Você coloca o resultado de uma expressão em uma variável local para uso posterior no seu código. Solução: Mova a expressão inteira para um método separado e retorne o resultado dele. Consulte o método em vez de usar uma variável. Incorpore o novo método em outros métodos, se necessário."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Substituir Variável Temporária por Consulta

> Problema: Você coloca o resultado de uma expressão em uma variável local para uso posterior no seu código. Solução: Mova a expressão inteira para um método separado e retorne o resultado dele. Consulte o método em vez de usar uma variável. Incorpore o novo método em outros métodos, se necessário.

## Problem

Você coloca o resultado de uma expressão em uma variável local para uso posterior no seu código.

## Solution

Mova a expressão inteira para um método separado e retorne o resultado dele. Consulte o método em vez de usar uma variável. Incorpore o novo método em outros métodos, se necessário.

## Why Refactor

Esta refatoração pode preparar o terreno para aplicar [Extrair Método](/pt-br/extract-method) em uma parte de um método muito longo.

A mesma expressão às vezes também pode ser encontrada em outros métodos, o que é uma razão para considerar a criação de um método comum.

## Benefits

* Legibilidade do código. É muito mais fácil entender o propósito do método `getTax()` do que a linha `orderPrice() * 0.2`.
* Código mais enxuto via deduplicação, se a linha que está sendo substituída for usada em vários métodos.

## How to Refactor

1. Certifique-se de que um valor é atribuído à variável uma única vez dentro do método. Caso contrário, use [Dividir Variável Temporária](/pt-br/split-temporary-variable) para garantir que a variável seja usada apenas para armazenar o resultado da sua expressão.
2. Use [Extrair Método](/pt-br/extract-method) para colocar a expressão de interesse em um novo método. Certifique-se de que esse método apenas retorne um valor e não altere o estado do objeto. Se o método afetar o estado visível do objeto, use [Separar Consulta de Modificador](/pt-br/separate-query-from-modifier).
3. Substitua a variável por uma consulta ao seu novo método.
## Relations

**Similar techniques**

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

**Eliminates smells**

- [Método Longo](/pt-br/smells/long-method.md)
- [Código Duplicado](/pt-br/smells/duplicate-code.md)

## Code Examples

### java

```java
// Before
double calculateTotal() {
  double basePrice = quantity * itemPrice;
  if (basePrice > 1000) {
    return basePrice * 0.95;
  }
  else {
    return basePrice * 0.98;
  }
}

// After
double calculateTotal() {
  if (basePrice() > 1000) {
    return basePrice() * 0.95;
  }
  else {
    return basePrice() * 0.98;
  }
}
double basePrice() {
  return quantity * itemPrice;
}
```

### csharp

```csharp
// Before
double CalculateTotal() 
{
  double basePrice = quantity * itemPrice;
  
  if (basePrice > 1000) 
  {
    return basePrice * 0.95;
  }
  else 
  {
    return basePrice * 0.98;
  }
}

// After
double CalculateTotal() 
{
  if (BasePrice() > 1000) 
  {
    return BasePrice() * 0.95;
  }
  else 
  {
    return BasePrice() * 0.98;
  }
}
double BasePrice() 
{
  return quantity * itemPrice;
}
```

### php

```php
// Before
$basePrice = $this->quantity * $this->itemPrice;
if ($basePrice > 1000) {
  return $basePrice * 0.95;
} else {
  return $basePrice * 0.98;
}

// After
if ($this->basePrice() > 1000) {
  return $this->basePrice() * 0.95;
} else {
  return $this->basePrice() * 0.98;
}

...

function basePrice() {
  return $this->quantity * $this->itemPrice;
}
```

### python

```python
// Before
def calculateTotal():
    basePrice = quantity * itemPrice
    if basePrice > 1000:
        return basePrice * 0.95
    else:
        return basePrice * 0.98

// After
def calculateTotal():
    if basePrice() > 1000:
        return basePrice() * 0.95
    else:
        return basePrice() * 0.98

def basePrice():
    return quantity * itemPrice
```

### typescript

```typescript
// Before
calculateTotal(): number {
  let basePrice = quantity * itemPrice;
  if (basePrice > 1000) {
    return basePrice * 0.95;
  }
  else {
    return basePrice * 0.98;
  }
}

// After
calculateTotal(): number {
  if (basePrice() > 1000) {
    return basePrice() * 0.95;
  }
  else {
    return basePrice() * 0.98;
  }
}
basePrice(): number {
  return quantity * itemPrice;
}
```

