Il est très clair, si vous lisez la toute première phrase de la question, que cette question ne concerne pas des utilisations appropriées, telles que l’
élimination des nombres magiques , mais
au mieux une terrible cohérence insensée . Quel est ce que cette réponse adresse
Le bon sens vous dit que const char UPPER_CASE_A = 'A';
ou const char A = 'A'
ne pas ajouter quoi que ce soit , mais l' entretien et de la complexité de votre système. const char STATUS_CODE.ARRIVED = 'A'
est un cas différent.
Les constantes sont supposées représenter des éléments immuables au moment de l'exécution, mais devront peut-être être modifiées à l'avenir au moment de la compilation. Quand serait const char A =
bien égal autre chose que A
?
Si vous voyez public static final char COLON = ':'
du code Java, trouvez qui a écrit ça et cassez leurs claviers. Si la représentation COLON
change pour toujours, :
vous aurez un cauchemar de maintenance.
Obfuscation:
Que se passe-t-il quand quelqu'un le change COLON = '-'
parce que là où ils l'utilisent a besoin d'un -
partout partout? Allez-vous écrire des tests unitaires qui indiquent essentiellement assertThat(':' == COLON)
pour chaque const
référence unique afin de s'assurer qu'ils ne sont pas modifiés? Seulement pour que quelqu'un répare le test quand ils le changent?
Si quelqu'un prétend réellement que cela public static final String EMPTY_STRING = "";
est utile et bénéfique, vous venez de qualifier ses connaissances et de les ignorer en toute sécurité pour tout le reste.
Le fait de disposer de tous les caractères imprimables disponibles avec une version nommée montre simplement que quiconque l'a fait n'est pas qualifié pour écrire du code sans surveillance.
Cohésion:
Cela réduit aussi artificiellement la cohésion, car cela éloigne les objets de ceux qui les utilisent et qui leur sont liés.
En programmation informatique, la cohésion fait référence au degré d'appartenance des éléments d'un module. Ainsi, la cohésion mesure la force de la relation entre les différentes fonctionnalités d'un module donné. Par exemple, dans les systèmes hautement cohésifs, la fonctionnalité est étroitement liée.
Couplage:
Il associe également de nombreuses classes non apparentées car elles finissent toutes par référencer des fichiers qui ne sont pas vraiment liés à ce qu'ils font.
Le couplage étroit se produit lorsqu'un groupe de classes est fortement dépendant les unes des autres. Ce scénario se produit lorsqu'une classe assume trop de responsabilités ou lorsqu'une préoccupation concerne plusieurs classes plutôt que d'avoir sa propre classe.
Si vous avez utilisé un nom plus comme DELIMITER = ','
vous avez toujours le même problème, parce que le nom est générique et ne porte aucune sémantique. Réaffecter la valeur ne fait rien de plus pour aider à faire une analyse d’impact que de chercher et de remplacer le littéral ','
. Parce que quel code utilise-t-il et a-t-il besoin du ,
et un autre code utilise mais a besoin ;
maintenant? Encore faut-il regarder chaque utilisation manuellement et les changer.
Dans la nature:
J'ai récemment refactoré une 1,000,000+ LOC
application de 18 ans. Il y avait des choses comme public static final COMMA = SPACE + "," + SPACE;
. Ce n’est pas mieux que de simplement indiquer le " , "
cas échéant.
Si vous voulez faire valoir la lisibilité, vous devez apprendre à configurer votre IDE pour qu'il affiche les whitespace
caractères où vous pouvez les voir ou quoi que ce soit, c'est une raison extrêmement compliquée d'introduire l'entropie dans un système.
Il avait également ,
défini plusieurs fois avec plusieurs fautes d'orthographe du mot COMMA
dans plusieurs packages et classes. Avec des références à toutes les variations mélangées ensemble dans le code. Essayer de réparer quelque chose sans casser quelque chose de complètement indépendant n’était rien de moins qu’un cauchemar .
Même avec l'alphabet, il y avait plusieurs UPPER_CASE_A
, A
, UPPER_A
, A_UPPER
que la plupart du temps étaient égaux , A
mais dans certains cas , n'étaient pas . Pour presque tous les personnages, mais pas tous.
Et d'après l'historique des éditions, il ne semble pas qu'un seul d'entre eux ait été édité ou modifié au cours des 18 dernières années. En effet, ce qui devrait être une raison évidente est que cela casserait trop d'éléments cachés. Vous avez donc une nouvelle variable. noms qui indiquent la même chose et qui ne peuvent jamais être modifiés pour la même raison.
Dans aucune réalité sensée, ne pouvez-vous affirmer que cette pratique ne fait que commencer à l'entropie maximale.
J'ai refactoré tout ce gâchis et mis en ligne toutes les tautologies et les nouvelles recrues des collèges ont été beaucoup plus productives, car elles n'étaient pas obligées de chasser à travers plusieurs niveaux d'indirection ce que ces const
références indiquaient réellement, car elles n'étaient pas fiables dans ce qu'elles s'appelaient vs ce qu'ils contenaient.