---
title: "Descomponer Condicional"
type: "refactoring-technique"
slug: "decompose-conditional"
url: "http://localhost:3000/es/decompose-conditional.md"
category: "Simplifying Conditional Expressions"
description: "Problema: Tienes un condicional complejo (if-then/else o switch). Solución: Descompón las partes complicadas del condicional en métodos separados: la condición, el then y el else."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Descomponer Condicional

> Problema: Tienes un condicional complejo (if-then/else o switch). Solución: Descompón las partes complicadas del condicional en métodos separados: la condición, el then y el else.

## Problem

Tienes un condicional complejo (`if-then`/`else` o `switch`).

## Solution

Descompón las partes complicadas del condicional en métodos separados: la condición, `then` y `else`.

## Why Refactor

Cuanto más largo es un fragmento de código, más difícil es de entender. Las cosas se vuelven aún más difíciles de entender cuando el código está lleno de condiciones:

* Mientras estás ocupado averiguando qué hace el código del bloque `then`, olvidas cuál era la condición correspondiente.
* Mientras estás ocupado analizando el `else`, olvidas qué hace el código del `then`.

## Benefits

* Al extraer el código condicional a métodos con nombres claros, le facilitas la vida a quien mantenga el código más adelante (¡como tú mismo, dentro de dos meses!).
* Esta técnica de refactorización también es aplicable a expresiones cortas en las condiciones. La cadena `isSalaryDay()` es mucho más bonita y descriptiva que el código para comparar fechas.

## How to Refactor

1. Extrae el condicional a un método separado mediante [Extraer Método](/es/extract-method).
2. Repite el proceso para los bloques `then` y `else`.
## Relations

**Eliminates smells**

- [Método Largo](/es/smells/long-method.md)

## Code Examples

### java

```java
// Before
if (date.before(SUMMER_START) || date.after(SUMMER_END)) {
  charge = quantity * winterRate + winterServiceCharge;
}
else {
  charge = quantity * summerRate;
}

// After
if (isSummer(date)) {
  charge = summerCharge(quantity);
}
else {
  charge = winterCharge(quantity);
}
```

### csharp

```csharp
// Before
if (date < SUMMER_START || date > SUMMER_END) 
{
  charge = quantity * winterRate + winterServiceCharge;
}
else 
{
  charge = quantity * summerRate;
}

// After
if (isSummer(date))
{
  charge = SummerCharge(quantity);
}
else 
{
  charge = WinterCharge(quantity);
}
```

### php

```php
// Before
if ($date->before(SUMMER_START) || $date->after(SUMMER_END)) {
  $charge = $quantity * $winterRate + $winterServiceCharge;
} else {
  $charge = $quantity * $summerRate;
}

// After
if (isSummer($date)) {
  $charge = summerCharge($quantity);
} else {
  $charge = winterCharge($quantity);
}
```

### python

```python
// Before
if date.before(SUMMER_START) or date.after(SUMMER_END):
    charge = quantity * winterRate + winterServiceCharge
else:
    charge = quantity * summerRate

// After
if isSummer(date):
    charge = summerCharge(quantity)
else:
    charge = winterCharge(quantity)
```

### typescript

```typescript
// Before
if (date.before(SUMMER_START) || date.after(SUMMER_END)) {
  charge = quantity * winterRate + winterServiceCharge;
}
else {
  charge = quantity * summerRate;
}

// After
if (isSummer(date)) {
  charge = summerCharge(quantity);
}
else {
  charge = winterCharge(quantity);
}
```

