Pendant des années, j'ai été nommé à l'aide de blocs de limiter la portée des variables temporaires. Je n'ai jamais vu cela nulle part ailleurs, ce qui me fait me demander si c'est une mauvaise idée. Surtout depuis l'IDE Eclipse drapeaux de ces mises en garde par défaut.
J'ai utilisé à bon escient, je pense que, dans mon propre code. Mais depuis qu'il est non-idiomatique au point où de bons programmeurs vont méfiance quand ils voient ça, j'ai vraiment deux façons d'aller à partir d'ici:
- éviter de le faire, ou
- promouvoir, avec l'espoir qu'il deviendra un idiome.
Exemple (dans une plus grande méthode):
final Date nextTuesday;
initNextTuesday: {
GregorianCalendar cal = new GregorianCalendar();
... // About 5-10 lines of setting the calendar fields
nextTuesday = cal.getTime();
}
Ici, je suis en utilisant un GregorianCalendar juste pour initialiser une date, et je veux m'assurer de ne pas accidentellement le réutiliser.
Certaines personnes ont fait remarquer que vous n'avez pas réellement besoin de nom de la rue. Même si c'est vrai, un bloc brut semble encore plus comme un bug, car l'intention n'est pas claire. En outre, nommer quelque chose vous encourage à réfléchir sur l'intention de le bloquer. L'objectif ici est d'identifier les sections de code, de ne pas donner à chaque variable temporaire de son propre champ d'application.
Beaucoup de gens ont dit qu'il est préférable d'aller directement à de petites méthodes. Je suis d'accord que cela devrait être votre premier instinct. Cependant, il peut y avoir plusieurs facteurs atténuants:
- Même à envisager un bloc nommé, le code doit être court, on-off code qui ne sera jamais appelé ailleurs.
- Un bloc nommé est un moyen rapide d'organiser un grand méthode sans créer une méthode avec une douzaine de paramètres. Cela est particulièrement vrai quand une classe est dans le flux, et les entrées sont susceptibles de changer d'une version à l'autre.
- Création d'une nouvelle méthode encourage la réutilisation, ce qui peut être mal avisé si les cas d'utilisation ne sont pas bien établies. Un bloc nommé est plus facile (psychologiquement, au moins) à jeter.
- En particulier pour les tests unitaires, vous devrez peut-être définir une douzaine de différents objets sur des assertions, et ils sont suffisamment différentes pour que vous ne pouvez pas (encore) trouver un moyen de les réunir dans un petit nombre de méthodes, et vous ne pouvez pas penser à un moyen de les distinguer avec des noms qui ne sont pas d'un mile de long.
Avantages de l'utilisation de l'étendue nommée:
- Ne peut pas accidentellement réutiliser les variables temporaires
- Portée limitée donne garbage collector et compilateur JIT plus d'informations sur programmeur intention
- Nom de bloc fournit un commentaire sur un bloc de code, que je trouve plus lisible que les commentaires ouverts
- Facilite la refactorisation de code d'un grand méthode en peu de méthodes, ou vice-versa, puisque le bloc nommé est plus facile à séparer de code non structurées.
Inconvénients:
Pas idiomatiques: les programmeurs qui n'ont pas vu cette utilisation de l'nommé blocs (c'est à dire tout le monde sauf moi) supposons qu'elle est buggy, puisqu'ils ne peuvent pas trouver des références pour le nom du bloc. (Tout comme Eclipse n'.) Et obtenir quelque chose pour devenir idiomatique est une bataille difficile.
Il peut être utilisé comme une excuse pour de mauvaises habitudes de programmation, tels que:
- Faire d'énormes monolithiques, les méthodes de plusieurs petites méthodes serait plus lisible.
- Les couches d'indentation trop profond pour lire facilement.
Note: j'ai édité cette question largement, sur la base des réponses réfléchies. Merci!