Es muy claro si lees la primera oración de la pregunta que esta pregunta no se trata de usos apropiados, como la
eliminación de números mágicos , sino de una
consistencia tonta sin sentido, en el mejor de los casos. Que es lo que aborda 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 las constantes representan cosas que son inmutables en tiempo de ejecución, pero que pueden necesitar modificaciones en el futuro en tiempo de compilación. ¿Cuándo equivaldría const char A =
correctamente a otra cosa que no sea A
?
Si ve public static final char COLON = ':'
en el código Java, encuentre a quien lo escribió y rompa sus teclados. Si la representación COLON
cambia para siempre :
, tendrá una pesadilla de mantenimiento.
Ofuscación:
¿Qué sucede cuando alguien lo cambia COLON = '-'
porque donde lo está usando necesita un -
lugar en todas partes? ¿Vas a escribir pruebas unitarias que básicamente digan assertThat(':' == COLON)
para cada const
referencia para asegurarte de que no se cambien? ¿Solo para que alguien arregle la prueba cuando la cambian?
Si alguien realmente argumenta que public static final String EMPTY_STRING = "";
es útil y beneficioso, simplemente calificó su conocimiento e ignórelo con seguridad en todo lo demás.
Tener todos los caracteres imprimibles disponibles con una versión con nombre solo 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 la programación de computadoras, la cohesión se refiere al grado en que los elementos de un módulo pertenecen juntos. Por lo tanto, la cohesión mide la fuerza de la relación entre las piezas de funcionalidad dentro de un módulo dado. Por ejemplo, en sistemas altamente cohesivos, la funcionalidad está fuertemente relacionada.
Acoplamiento:
También combina muchas clases no relacionadas porque todas terminan haciendo referencia a archivos que no están realmente relacionados con lo que hacen.
El acoplamiento apretado es cuando un grupo de clases depende mucho el uno del otro. Este escenario surge cuando una clase asume demasiadas responsabilidades, o cuando una preocupación se extiende a muchas clases en lugar de tener su propia clase.
Si usara un nombre mejor como el DELIMITER = ','
, todavía tendría el mismo problema, porque el nombre es genérico y no tiene semántica. La reasignación del valor no ayuda más a hacer un análisis de impacto que la búsqueda y el reemplazo del literal ','
. Porque, ¿cuál es el código que lo usa y necesita ,
y otros códigos que usa pero necesita ;
ahora? Todavía tengo que mirar cada uso manualmente y cambiarlos.
En la naturaleza:
Hace poco refactorizado una 1,000,000+ LOC
aplicación que tenía 18 años. Tenía cosas como public static final COMMA = SPACE + "," + SPACE;
. De ninguna manera es mejor que simplemente alinearse " , "
donde se necesita.
Si desea argumentar la legibilidad , necesita aprender a configurar su IDE para mostrar whitespace
caracteres donde pueda verlos o lo que sea, esa es solo una razón extremadamente floja para introducir la entropía en un sistema.
También se había ,
definido varias veces con múltiples errores ortográficos de la palabra COMMA
en múltiples paquetes y clases. Con referencias a todas las variaciones entremezcladas en código. Fue una pesadilla tratar de arreglar algo sin romper algo completamente ajeno.
Lo mismo con el alfabeto, había múltiples UPPER_CASE_A
, A
, UPPER_A
, A_UPPER
que la mayoría de las veces eran igual A
, pero en algunos casos no eran . Para casi todos los personajes, pero no para todos los personajes.
Y a partir de los historiales de edición, no parecía que ninguno de estos haya sido editado o cambiado en los últimos 18 años, debido a lo que ahora debería ser una razón obvia es que rompería demasiadas cosas que no se pueden rastrear, por lo que tiene una nueva variable nombres que apuntan a la misma cosa que nunca se pueden cambiar por la misma razón.
En ninguna realidad sensata puede argumentar que esta práctica no está haciendo nada más que comenzar con la máxima entropía.
Refacté todo este desorden y subrayé todas las tautologías y las nuevas contrataciones universitarias fueron mucho más productivas porque no tenían que perseguir a través de múltiples niveles de indirección lo que estas const
referencias apuntaban realmente, porque no eran confiables en lo que se llamaban vs lo que contenían.