---
title: "Reemplazar Variable Temporal por Consulta"
type: "refactoring-technique"
slug: "replace-temp-with-query"
url: "http://localhost:3000/es/replace-temp-with-query.md"
category: "Composing Methods"
description: "Problema: Colocas el resultado de una expresión en una variable local para su uso posterior en el código. Solución: Mueve toda la expresión a un método independiente y devuelve el resultado desde él. Consulta el método en lugar de usar una variable. Incorpora el nuevo método en otros métodos, si es necesario."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Reemplazar Variable Temporal por Consulta

> Problema: Colocas el resultado de una expresión en una variable local para su uso posterior en el código. Solución: Mueve toda la expresión a un método independiente y devuelve el resultado desde él. Consulta el método en lugar de usar una variable. Incorpora el nuevo método en otros métodos, si es necesario.

## Problem

Colocas el resultado de una expresión en una variable local para su uso posterior en el código.

## Solution

Mueve toda la expresión a un método independiente y devuelve el resultado desde él. Consulta el método en lugar de usar una variable. Incorpora el nuevo método en otros métodos, si es necesario.

## Why Refactor

Esta refactorización puede sentar las bases para aplicar [Extraer Método](/es/extract-method) a una parte de un método muy largo.

La misma expresión a veces puede encontrarse también en otros métodos, lo que es una razón para considerar la creación de un método común.

## Benefits

* Legibilidad del código. Es mucho más fácil entender el propósito del método `getTax()` que la línea `orderPrice() * 0.2`.
* Código más esbelto mediante la eliminación de duplicación, si la línea reemplazada se utiliza en varios métodos.

## How to Refactor

1. Asegúrate de que se asigne un valor a la variable una sola vez dentro del método. Si no es así, usa [Dividir Variable Temporal](/es/split-temporary-variable) para garantizar que la variable se use únicamente para almacenar el resultado de tu expresión.
2. Usa [Extraer Método](/es/extract-method) para colocar la expresión de interés en un nuevo método. Asegúrate de que este método solo devuelva un valor y no cambie el estado del objeto. Si el método afecta al estado visible del objeto, usa [Separar Consulta de Modificador](/es/separate-query-from-modifier).
3. Reemplaza la variable con una consulta a tu nuevo método.
## Relations

**Similar techniques**

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

**Eliminates smells**

- [Método Largo](/es/smells/long-method.md)
- [Código Duplicado](/es/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;
}
```

