---
title: "Método Largo"
type: "code-smell"
slug: "long-method"
url: "http://localhost:3000/es/smells/long-method.md"
category: "Bloaters"
description: "Un método contiene demasiadas líneas de código. Por lo general, cualquier método con más de diez líneas debería hacerte empezar a hacer preguntas."
---
# Método Largo

> Un método contiene demasiadas líneas de código. Por lo general, cualquier método con más de diez líneas debería hacerte empezar a hacer preguntas.

## Signs and Symptoms

Un método contiene demasiadas líneas de código. Por lo general, cualquier método con más de diez líneas debería hacerte empezar a hacer preguntas.

## Reasons for the Problem

Como en el Hotel California, siempre se añade algo a un método pero nunca se quita nada. Dado que es más fácil escribir código que leerlo, este «olor» pasa desapercibido hasta que el método se convierte en una bestia fea y desmesurada.

Mentalmente, a menudo resulta más difícil crear un método nuevo que ampliar uno existente: «Pero si solo son dos líneas, no tiene sentido crear todo un método solo para eso...». Lo que significa que se añade otra línea y luego otra más, dando lugar a una maraña de código espagueti.

## Payoff

* Entre todos los tipos de código orientado a objetos, las clases con métodos cortos son las que más viven. Cuanto más largo es un método o función, más difícil resulta entenderlo y mantenerlo.
* Además, los métodos largos ofrecen el escondite perfecto para código duplicado no deseado.

## Performance

¿Acaso un aumento en el número de métodos perjudica el rendimiento, como muchos afirman? En casi todos los casos el impacto es tan insignificante que ni siquiera vale la pena preocuparse por ello.

Además, ahora que tienes un código claro y comprensible, es más probable que encuentres métodos realmente eficaces para reestructurar el código y obtener mejoras de rendimiento reales si alguna vez surge la necesidad.
## Relations

**Treated by**

- [Extraer método](/es/extract-method.md)
- [Reemplazar Variable Temporal por Consulta](/es/replace-temp-with-query.md)
- [Introducir Objeto Parámetro](/es/introduce-parameter-object.md)
- [Preservar el Objeto Completo](/es/preserve-whole-object.md)
- [Reemplazar método con objeto-método](/es/replace-method-with-method-object.md)
- [Descomponer Condicional](/es/decompose-conditional.md)


## Detected by

- **sonar** `S138` — Las funciones no deben tener demasiadas líneas de código (https://rules.sonarsource.com/java/RSPEC-138/)
- **eslint** `max-lines-per-function` — Imponer un número máximo de líneas por función (https://eslint.org/docs/latest/rules/max-lines-per-function)
- **eslint** `max-statements` — Imponer un número máximo de sentencias permitidas en los bloques de función (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)
