---
title: "Comandos Switch"
type: "code-smell"
slug: "switch-statements"
url: "http://localhost:3000/pt-br/smells/switch-statements.md"
category: "Object-Orientation Abusers"
description: "Você tem um operador switch complexo ou uma sequência de instruções if."
---
# Comandos Switch

> Você tem um operador switch complexo ou uma sequência de instruções if.

## Signs and Symptoms

Você tem um operador `switch` complexo ou uma sequência de instruções `if`.

## Reasons for the Problem

O uso relativamente raro dos operadores `switch` e `case` é uma das marcas registradas do código orientado a objetos. Muitas vezes, o código de um único `switch` pode estar espalhado por diferentes partes do programa. Quando uma nova condição é adicionada, você tem que encontrar todo o código `switch` e modificá-lo.

Como regra geral, quando você vê `switch`, deve pensar em polimorfismo.

## Payoff

* Melhor organização do código.
## Relations

**Treated by**

- [Extrair Método](/pt-br/extract-method.md)
- [Mover Método](/pt-br/move-method.md)
- [Substituir Código de Tipo por Subclasses](/pt-br/replace-type-code-with-subclasses.md)
- [Substituir Código de Tipo por Estado/Estratégia](/pt-br/replace-type-code-with-state-strategy.md)
- [Substituir Condicional por Polimorfismo](/pt-br/replace-conditional-with-polymorphism.md)
- [Substituir Parâmetro por Métodos Explícitos](/pt-br/replace-parameter-with-explicit-methods.md)
- [Introduzir Objeto Nulo](/pt-br/introduce-null-object.md)


## Detected by

- **sonar** `S1479` — instruções "switch" não devem ter cláusulas "case" em excesso (https://rules.sonarsource.com/java/RSPEC-1479/)
- **eslint** `sonarjs/max-switch-cases` — instruções "switch" não devem ter cláusulas "case" em excesso (https://github.com/SonarSource/eslint-plugin-sonarjs/blob/master/docs/rules/max-switch-cases.md)
