---
title: "Méthode longue"
type: "code-smell"
slug: "long-method"
url: "http://localhost:3000/fr/smells/long-method.md"
category: "Bloaters"
description: "Une méthode contient trop de lignes de code. En règle générale, toute méthode de plus de dix lignes devrait vous amener à vous poser des questions."
---
# Méthode longue

> Une méthode contient trop de lignes de code. En règle générale, toute méthode de plus de dix lignes devrait vous amener à vous poser des questions.

## Signs and Symptoms

Une méthode contient trop de lignes de code. En règle générale, toute méthode de plus de dix lignes devrait vous amener à vous poser des questions.

## Reasons for the Problem

Comme à l'Hôtel California, on ajoute toujours quelque chose à une méthode mais on n'en retire jamais rien. Comme il est plus facile d'écrire du code que de le lire, cette « odeur » passe inaperçue jusqu'à ce que la méthode se transforme en une bête énorme et hideuse.

Sur le plan mental, il est souvent plus difficile de créer une nouvelle méthode que d'ajouter à une méthode existante : « Mais ce n'est que deux lignes, inutile de créer toute une méthode juste pour ça... » Du coup, on ajoute une ligne, puis encore une autre, donnant naissance à un enchevêtrement de code spaghetti.

## Payoff

* Parmi tous les types de code orienté objet, ce sont les classes aux méthodes courtes qui vivent le plus longtemps. Plus une méthode ou une fonction est longue, plus elle devient difficile à comprendre et à maintenir.
* De plus, les méthodes longues constituent la cachette idéale pour du code dupliqué indésirable.

## Performance

L'augmentation du nombre de méthodes nuit-elle aux performances, comme beaucoup le prétendent ? Dans la quasi-totalité des cas, l'impact est si négligeable qu'il ne vaut même pas la peine de s'en soucier.

De plus, maintenant que votre code est clair et compréhensible, vous avez plus de chances de trouver des méthodes vraiment efficaces pour restructurer le code et obtenir de réels gains de performance si le besoin s'en fait un jour sentir.
## Relations

**Treated by**

- [Extraire une méthode](/fr/extract-method.md)
- [Remplacer une variable temporaire par une requête](/fr/replace-temp-with-query.md)
- [Introduire un objet paramètre](/fr/introduce-parameter-object.md)
- [Préserver l'objet entier](/fr/preserve-whole-object.md)
- [Remplacer une méthode par un objet-méthode](/fr/replace-method-with-method-object.md)
- [Décomposer une condition](/fr/decompose-conditional.md)


## Detected by

- **sonar** `S138` — Les fonctions ne devraient pas comporter trop de lignes de code (https://rules.sonarsource.com/java/RSPEC-138/)
- **eslint** `max-lines-per-function` — Imposer un nombre maximal de lignes par fonction (https://eslint.org/docs/latest/rules/max-lines-per-function)
- **eslint** `max-statements` — Imposer un nombre maximal d'instructions autorisées dans les blocs de fonction (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)
