57 votes

Pourquoi voudrait-on marquer les variables locales et les paramètres de méthode comme "finaux" en Java?

En Java, vous pouvez qualifier les variables locales et les paramètres de méthode avec le mot-clé final.

 public static void foo(final int x) {
  final String qwerty = "bar"; 
}
 

Cela entraînerait l'impossibilité de réaffecter x et qwerty dans le corps de la méthode.

Cette pratique pousse votre code dans le sens de l'immutabilité, ce qui est généralement considéré comme un avantage. Mais, il a également tendance à encombrer le code avec "final" apparaissant partout. Quelle est votre opinion sur le mot-clé final pour les variables locales et les paramètres de méthode en Java?

53voto

rjray Points 3641

Vous devriez essayer pour ce faire, chaque fois que cela est approprié. En plus de servir pour vous avertir lorsque vous "accidentellement" essayez de modifier une valeur, il fournit des informations pour le compilateur, qui peut conduire à une meilleure optimisation du fichier de classe. C'est l'un des points du livre, "Hardcore Java" par Robert Simmons, Jr., En fait, le livre passe tout son deuxième chapitre sur l'utilisation de finale de promouvoir les optimisations et de prévenir les erreurs de logique. Les outils d'analyse statique comme PMD et SA intégré Eclipse drapeau de ces sortes d'affaires pour cette raison.

27voto

SCdF Points 11397

Mon opinion personnelle est que c'est une perte de temps. Je crois que l'encombrement visuel et la verbosité ajoutée n'en valent pas la peine.

Je n'ai jamais été dans une situation où j'ai réaffecté (souvenez-vous, cela ne rend pas les objets immuables, cela signifie simplement que vous ne pouvez pas réaffecter une autre référence à une variable) une variable en erreur.

Mais, bien sûr, ce sont toutes les préférences personnelles ;-)

8voto

Rendre un paramètre final garantit que la valeur utilisée à n'importe quel emplacement de la méthode fait référence à la valeur transmise. Sinon, vous devez analyser mentalement tout le code situé au-dessus d'un emplacement donné pour connaître la valeur du paramètre à ce stade.

Par conséquent, ne pas utiliser final rend votre code moins lisible et plus facilement maintenable, tout seul :)

Les variables locales finales dépendent de l'intention, et sont moins importantes à mon point de vue. Cela dépend de ce qui se passe.

6voto

Uri Points 50687

Dans le cas des variables locales, j'ai tendance à éviter cela. Cela crée un encombrement visuel et est généralement inutile - une fonction doit être suffisamment courte ou se concentrer sur un seul impact pour vous permettre de voir rapidement que vous modifiez quelque chose qui ne devrait pas l'être.

Dans le cas des nombres magiques, je les mettrais de toute façon comme un champ privé constant plutôt que dans le code.

J'utilise final uniquement dans les situations où cela est nécessaire (par exemple, passer des valeurs à des classes anonymes).

5voto

javamonkey79 Points 6807

En raison de la nature (parfois occasionnelle) déroutante du comportement " passage par référence " de Java, je suis tout à fait d'accord avec la finalisation du paramètre var.

Finaliser les variables locales semble un peu excessif à l’OMI.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X