---
title: "Código Duplicado"
type: "code-smell"
slug: "duplicate-code"
url: "http://localhost:3000/pt-br/smells/duplicate-code.md"
category: "Dispensables"
description: "Dois fragmentos de código parecem quase idênticos."
---
# Código Duplicado

> Dois fragmentos de código parecem quase idênticos.

## Signs and Symptoms

Dois fragmentos de código parecem quase idênticos.

## Reasons for the Problem

A duplicação geralmente ocorre quando vários programadores trabalham em partes diferentes do mesmo programa ao mesmo tempo. Como estão trabalhando em tarefas diferentes, eles podem não saber que um colega já escreveu código semelhante que poderia ser reaproveitado para suas próprias necessidades.

Há também uma duplicação mais sutil, quando partes específicas do código parecem diferentes mas, na verdade, realizam o mesmo trabalho. Esse tipo de duplicação pode ser difícil de encontrar e corrigir.

Às vezes a duplicação é proposital. Quando estão correndo para cumprir prazos e o código existente está “quase certo” para a tarefa, programadores iniciantes podem não resistir à tentação de copiar e colar o código relevante. E, em alguns casos, o programador é simplesmente preguiçoso demais para organizar o código.

## Payoff

* Mesclar código duplicado simplifica a estrutura do seu código e o torna mais curto.
* Simplificação + concisão = código mais fácil de simplificar e mais barato de manter.
## Relations

**Treated by**

- [Extrair Método](/pt-br/extract-method.md)
- [Subir Campo](/pt-br/pull-up-field.md)
- [Subir Corpo de Construtor](/pt-br/pull-up-constructor-body.md)
- [Formar Método Template](/pt-br/form-template-method.md)
- [Substituir Algoritmo](/pt-br/substitute-algorithm.md)
- [Extrair Superclasse](/pt-br/extract-superclass.md)
- [Extrair Classe](/pt-br/extract-class.md)
- [Consolidar Expressão Condicional](/pt-br/consolidate-conditional-expression.md)
- [Consolidar Fragmentos Condicionais Duplicados](/pt-br/consolidate-duplicate-conditional-fragments.md)


## Detected by

- **sonar** `S4144` — Métodos não devem ter implementações idênticas (https://rules.sonarsource.com/java/RSPEC-4144/)
- **eslint** `sonarjs/no-identical-functions` — Funções não devem ter implementações idênticas (https://github.com/SonarSource/eslint-plugin-sonarjs/blob/master/docs/rules/no-identical-functions.md)
- **pmd** `cpd` — CPD (Copy/Paste Detector) (https://pmd.github.io/pmd/pmd_userdocs_cpd.html)
- **eslint** `sonarjs/no-all-duplicated-branches` — Todos os ramos de uma condicional não devem ter a mesma implementação (S3923) (https://github.com/SonarSource/eslint-plugin-sonarjs/blob/master/docs/rules/no-all-duplicated-branches.md)
- **sonar** `S1192` — Literais de string não devem ser duplicados (https://rules.sonarsource.com/java/RSPEC-1192/)
