---
title: "Consolidar Expressão Condicional"
type: "refactoring-technique"
slug: "consolidate-conditional-expression"
url: "http://localhost:3000/pt-br/consolidate-conditional-expression.md"
category: "Simplifying Conditional Expressions"
description: "Problema: você tem vários condicionais que levam ao mesmo resultado ou ação. Solução: consolide todos esses condicionais em uma única expressão."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# Consolidar Expressão Condicional

> Problema: você tem vários condicionais que levam ao mesmo resultado ou ação. Solução: consolide todos esses condicionais em uma única expressão.

## Problem

Você tem vários condicionais que levam ao mesmo resultado ou ação.

## Solution

Consolide todos esses condicionais em uma única expressão.

## Why Refactor

Seu código contém muitos operadores alternados que executam ações idênticas. Não fica claro por que os operadores estão separados.

O principal objetivo da consolidação é extrair o condicional para um método separado, para maior clareza.

## Benefits

* Elimina código duplicado de fluxo de controle. Combinar vários condicionais que têm o mesmo “destino” ajuda a mostrar que você está fazendo apenas uma verificação complicada que leva a uma única ação.
* Ao consolidar todos os operadores, agora você pode isolar essa expressão complexa em um novo método com um nome que explica o propósito do condicional.

## How to Refactor

Antes de refatorar, certifique-se de que os condicionais não têm “efeitos colaterais” nem modificam algo, em vez de simplesmente retornar valores. Os efeitos colaterais podem estar escondidos no código executado dentro do próprio operador, como quando algo é adicionado a uma variável com base nos resultados de um condicional.

1. Consolide os condicionais em uma única expressão usando `and` e `or`. Como regra geral ao consolidar:

  * Condicionais aninhados são unidos com `and`.
  * Condicionais consecutivos são unidos com `or`.
2. Aplique [Extrair Método](/pt-br/extract-method) às condições do operador e dê ao método um nome que reflita o propósito da expressão.
## Relations

**Eliminates smells**

- [Código Duplicado](/pt-br/smells/duplicate-code.md)

## Code Examples

### java

```java
// Before
double disabilityAmount() {
  if (seniority < 2) {
    return 0;
  }
  if (monthsDisabled > 12) {
    return 0;
  }
  if (isPartTime) {
    return 0;
  }
  // Calcula o valor do benefício por invalidez.
  // ...
}

// After
double disabilityAmount() {
  if (isNotEligibleForDisability()) {
    return 0;
  }
  // Calcula o valor do benefício por invalidez.
  // ...
}
```

### csharp

```csharp
// Before
double DisabilityAmount() 
{
  if (seniority < 2) 
  {
    return 0;
  }
  if (monthsDisabled > 12) 
  {
    return 0;
  }
  if (isPartTime) 
  {
    return 0;
  }
  // Calcula o valor do benefício por invalidez.
  // ...
}

// After
double DisabilityAmount()
{
  if (IsNotEligibleForDisability())
  {
    return 0;
  }
  // Calcula o valor do benefício por invalidez.
  // ...
}
```

### php

```php
// Before
function disabilityAmount() {
  if ($this->seniority < 2) {
    return 0;
  }
  if ($this->monthsDisabled > 12) {
    return 0;
  }
  if ($this->isPartTime) {
    return 0;
  }
  // calcula o valor do benefício por invalidez
  ...

// After
function disabilityAmount() {
  if ($this->isNotEligibleForDisability()) {
    return 0;
  }
  // calcula o valor do benefício por invalidez
  ...
```

### python

```python
// Before
def disabilityAmount():
    if seniority < 2:
        return 0
    if monthsDisabled > 12:
        return 0
    if isPartTime:
        return 0
    # Calcula o valor do benefício por invalidez.
    # ...

// After
def disabilityAmount():
    if isNotEligibleForDisability():
        return 0
    # Calcula o valor do benefício por invalidez.
    # ...
```

### typescript

```typescript
// Before
disabilityAmount(): number {
  if (seniority < 2) {
    return 0;
  }
  if (monthsDisabled > 12) {
    return 0;
  }
  if (isPartTime) {
    return 0;
  }
  // Calcula o valor do benefício por invalidez.
  // ...
}

// After
disabilityAmount(): number {
  if (isNotEligibleForDisability()) {
    return 0;
  }
  // Calcula o valor do benefício por invalidez.
  // ...
}
```

