---
title: "Decompor Condicional"
type: "refactoring-technique"
slug: "decompose-conditional"
url: "http://localhost:3000/pt-br/decompose-conditional.md"
category: "Simplifying Conditional Expressions"
description: "Problema: Você tem uma condicional complexa (if-then/else ou switch). Solução: Decomponha as partes complicadas da condicional em métodos separados: a condição, o then e o else."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Decompor Condicional

> Problema: Você tem uma condicional complexa (if-then/else ou switch). Solução: Decomponha as partes complicadas da condicional em métodos separados: a condição, o then e o else.

## Problem

Você tem uma condicional complexa (`if-then`/`else` ou `switch`).

## Solution

Decomponha as partes complicadas da condicional em métodos separados: a condição, o `then` e o `else`.

## Why Refactor

Quanto mais longo é um trecho de código, mais difícil ele é de entender. As coisas ficam ainda mais difíceis de entender quando o código está cheio de condições:

* Enquanto você está ocupado descobrindo o que o código no bloco `then` faz, esquece qual era a condição relevante.
* Enquanto você está ocupado analisando o `else`, esquece o que o código no `then` faz.

## Benefits

* Ao extrair o código condicional para métodos com nomes claros, você facilita a vida de quem for manter o código mais tarde (como você mesmo, daqui a dois meses!).
* Essa técnica de refatoração também é aplicável a expressões curtas em condições. A string `isSalaryDay()` é muito mais bonita e descritiva do que código para comparar datas.

## How to Refactor

1. Extraia a condicional para um método separado via [Extrair Método](/pt-br/extract-method).
2. Repita o processo para os blocos `then` e `else`.
## Relations

**Eliminates smells**

- [Método Longo](/pt-br/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);
}
```

