Es muy claro si lees la primera oración de la pregunta
que esta pregunta no es sobre usos apropiados como
eliminando números mágicos , se trata de terribles tontos sin sentido
mejor consistencia. Que es a lo que se dirige esta respuesta
El sentido común le dice que const char UPPER_CASE_A = 'A';
o const char A = 'A'
no agrega nada más que mantenimiento y complejidad a su sistema. const char STATUS_CODE.ARRIVED = 'A'
es un caso diferente.
Se supone que
Constantes representan cosas que son inmutables en tiempo de ejecución, pero es posible que deban modificarse en el futuro en tiempo de compilación. ¿Cuándo const char A =
equivale correctamente a algo que no sea A
?
Si ves public static final char COLON = ':'
en el código de Java, encuentra a quien escribió eso y rompe sus teclados. Si la representación de COLON
cambia alguna vez de :
, tendrá una pesadilla de mantenimiento.
Ofuscación:
¿Qué sucede cuando alguien lo cambia a COLON = '-'
porque donde lo están utilizando necesita un -
en todas partes? ¿Vas a escribir pruebas unitarias que básicamente dicen assertThat(':' == COLON)
por cada referencia única de const
para asegurarte de que no se cambien? ¿Solo para que alguien arregle la prueba cuando la cambie?
Si alguien realmente argumenta que public static final String EMPTY_STRING = "";
es útil y beneficioso, solo calificaste su conocimiento y lo ignoras de forma segura en todo lo demás.
Tener todos los caracteres imprimibles disponibles con una versión nombrada simplemente demuestra que quien lo hizo, no está calificado para escribir código sin supervisión.
Cohesión:
También reduce artificialmente la cohesión, porque aleja las cosas de las cosas que las usan y están relacionadas con ellas.
En programación de computadoras, cohesión se refiere al grado en que la
Los elementos de un módulo pertenecen juntos. Así, la cohesión mide la
Fuerza de relación entre piezas de funcionalidad dentro de un
módulo dado. Por ejemplo, en sistemas altamente cohesivos la funcionalidad es
fuertemente relacionado.
Acoplamiento:
También une muchas clases no relacionadas porque todos terminan haciendo referencia a archivos que no están realmente relacionados con lo que hacen.
El acoplamiento apretado es cuando un grupo de clases es altamente dependiente de una
otro. Este escenario surge cuando una clase asume demasiados
responsabilidades, o cuando una preocupación se extiende sobre muchas clases
en lugar de tener su propia clase.
Si usara un mejor nombre como DELIMITER = ','
, todavía tendría el mismo problema, porque el nombre es genérico y no tiene carácter semántico. Reasignar el valor no hace más que ayudar a hacer un análisis de impacto que buscar y reemplazar el literal ','
. ¿Por qué un código lo usa y necesita el ,
y algún otro código usa pero necesita ;
ahora? Todavía tengo que mirar cada uso manualmente y cambiarlos.
En la naturaleza:
Recientemente he refactorizado una aplicación 1,000,000+ LOC
que tenía 18 años. Tenía cosas como public static final COMMA = SPACE + "," + SPACE;
. Eso no es de ninguna manera mejor que solo insertar " , "
donde se necesita.
Si desea argumentar legibilidad , debe aprender a configurar su IDE para que muestre whitespace
caracteres donde pueda verlos o lo que sea, eso es solo una razón muy perezosa para introducir entropía en un sistema.
También tenía ,
definido varias veces con varias faltas de ortografía de la palabra COMMA
en varios paquetes y clases. Con referencias a todas las variaciones entremezcladas en código. No fue nada menos que una pesadilla intentar y arreglar algo sin romper algo completamente sin relación.
Igual que con el alfabeto, hubo% UPPER_CASE_A
, A
, UPPER_A
, A_UPPER
que la mayor parte del tiempo fueron iguales a A
pero en algunos casos no fueron . Para casi todos los personajes, pero no todos los personajes.
Y a partir de las historias de edición, no parece que una sola de ellas haya sido editada o cambiada en los últimos 18 años, debido a lo que debería ser la razón obvia es que rompería demasiadas cosas que no se podían rastrear, por lo que tener nuevos nombres de variables que apunten a lo mismo que nunca se puede cambiar por el mismo motivo.
En ninguna realidad sensata, puedes argumentar que esta práctica no es hacer nada sino comenzar con la máxima entropía.
Refacté todo este lío e incorporé todas las tautologías y las nuevas contrataciones universitarias fueron mucho más productivas porque no tenían que buscar en múltiples niveles de indirección lo que estas const
referencias realmente señalaron, porque no estaban confiable en lo que se llamaron vs lo que contenían.