---
title: "Método Longo"
type: "code-smell"
slug: "long-method"
url: "http://localhost:3000/pt-br/smells/long-method.md"
category: "Bloaters"
description: "Um método contém linhas de código demais. Em geral, qualquer método com mais de dez linhas deve começar a levantar suspeitas."
---
# Método Longo

> Um método contém linhas de código demais. Em geral, qualquer método com mais de dez linhas deve começar a levantar suspeitas.

## Signs and Symptoms

Um método contém linhas de código demais. Em geral, qualquer método com mais de dez linhas deve começar a levantar suspeitas.

## Reasons for the Problem

Como no Hotel California, sempre se acrescenta algo a um método, mas nunca se retira nada. Como é mais fácil escrever código do que lê-lo, esse “smell” passa despercebido até que o método se transforme em uma fera feia e descomunal.

Mentalmente, muitas vezes é mais difícil criar um novo método do que adicionar a um já existente: “Mas são só duas linhas, não faz sentido criar um método inteiro só para isso...” O que significa que mais uma linha é adicionada e depois outra, dando origem a um emaranhado de código espaguete.

## Payoff

* Entre todos os tipos de código orientado a objetos, as classes com métodos curtos são as que sobrevivem por mais tempo. Quanto mais longo for um método ou função, mais difícil se torna entendê-lo e mantê-lo.
* Além disso, métodos longos oferecem o esconderijo perfeito para código duplicado indesejado.

## Performance

Será que aumentar o número de métodos prejudica o desempenho, como muitos afirmam? Em quase todos os casos, o impacto é tão insignificante que nem vale a pena se preocupar com ele.

Além do mais, agora que você tem um código claro e compreensível, é mais provável que encontre formas realmente eficazes de reestruturar o código e obter ganhos reais de desempenho, caso isso venha a ser necessário.
## Relations

**Treated by**

- [Extrair Método](/pt-br/extract-method.md)
- [Substituir Variável Temporária por Consulta](/pt-br/replace-temp-with-query.md)
- [Introduzir Objeto de Parâmetro](/pt-br/introduce-parameter-object.md)
- [Preservar o Objeto Inteiro](/pt-br/preserve-whole-object.md)
- [Substituir Método por Objeto de Método](/pt-br/replace-method-with-method-object.md)
- [Decompor Condicional](/pt-br/decompose-conditional.md)


## Detected by

- **sonar** `S138` — Funções não devem ter muitas linhas de código (https://rules.sonarsource.com/java/RSPEC-138/)
- **eslint** `max-lines-per-function` — Imponha um número máximo de linhas por função (https://eslint.org/docs/latest/rules/max-lines-per-function)
- **eslint** `max-statements` — Imponha um número máximo de instruções permitidas em blocos de função (https://eslint.org/docs/latest/rules/max-statements)
- **pylint** `R0915` — too-many-statements (https://pylint.readthedocs.io/en/latest/user_guide/messages/refactor/too-many-statements.html)
- **rubocop** `Metrics/MethodLength` — Metrics/MethodLength (https://docs.rubocop.org/rubocop/cops_metrics.html#metricsmethodlength)
