It is very clear if you read the very first sentence of the question
that this question is not about appropriate uses like
eliminating magic numbers, it is about terrible mindless foolish
consistency at best. Which is what this answer addresses
Il buon senso ti dice che const char UPPER_CASE_A = 'A';
o const char A = 'A'
non aggiunge nulla ma manutenzione e complessità al tuo sistema. const char STATUS_CODE.ARRIVED = 'A'
è un caso diverso.
Le costanti si suppone rappresentino elementi immutabili in fase di esecuzione, ma potrebbero dover essere modificati in futuro in fase di compilazione. Quando const char A =
equivarrà correttamente a qualsiasi valore diverso da A
?
Se vedi public static final char COLON = ':'
nel codice Java, trova chi ha scritto quello e interrompe le loro tastiere. Se la rappresentazione di COLON
cambia mai da :
avremo un incubo di manutenzione.
Offuscamento:
Che cosa accade quando qualcuno lo modifica in COLON = '-'
, perché dove lo stanno utilizzando ha bisogno invece di -
ovunque? Stai per scrivere dei test unitari che in pratica dicono assertThat(':' == COLON)
per ogni singolo riferimento const
per assicurarti che non vengano modificati? Solo per avere qualcuno risolvere il test quando li cambia?
Se qualcuno sostiene che public static final String EMPTY_STRING = "";
è utile e vantaggioso, hai appena qualificato le loro conoscenze e ignorato in sicurezza su tutto il resto.
Avere tutti i caratteri stampabili disponibili con una versione denominata dimostra semplicemente che chiunque l'abbia fatto, non è qualificato per scrivere codice senza supervisione.
coesione:
Inoltre riduce artificialmente la coesione, perché allontana le cose dalle cose che le usano e sono correlate a loro.
In computer programming, cohesion refers to the degree to which the
elements of a module belong together. Thus, cohesion measures the
strength of relationship between pieces of functionality within a
given module. For example, in highly cohesive systems functionality is
strongly related.
Coupling:
Accoppia anche molte classi non correlate perché finiscono per fare riferimento a file che non sono realmente correlati a ciò che fanno.
Tight coupling is when a group of classes are highly dependent on one
another. This scenario arises when a class assumes too many
responsibilities, or when one concern is spread over many classes
rather than having its own class.
Se hai usato un nome migliore come DELIMITER = ','
avresti ancora lo stesso problema, perché il nome è generico e non ha semantica. La riassegnazione del valore non serve più per eseguire un'analisi dell'impatto rispetto alla ricerca e alla sostituzione per il valore letterale ','
. Perché quello che è un codice lo usa e ha bisogno del ,
e qualche altro codice usa ma ha bisogno di ;
ora? Devo comunque esaminare ogni utilizzo manualmente e cambiarli.
In the Wild:
Recentemente ho refactored un'applicazione 1,000,000+ LOC
che aveva 18 anni. Aveva cose come public static final COMMA = SPACE + "," + SPACE;
. Questo non è in alcun modo migliore della semplice integrazione di " , "
dove è necessario.
Se vuoi discutere di leggibilità devi imparare a configurare l'IDE per visualizzare whitespace
caratteri dove puoi vederli o qualsiasi altra cosa, questo è solo un motivo estremamente pigro per introdurre l'entropia in un sistema.
Aveva anche ,
definito più volte con più errori di ortografia della parola COMMA
in più pacchetti e classi. Con riferimenti a tutte le variazioni mescolate insieme nel codice. E 'stato a dir poco un incubo provare a riparare qualcosa senza rompere qualcosa di completamente non correlato.
Come per l'alfabeto, c'erano più UPPER_CASE_A
, A
, UPPER_A
, A_UPPER
che la maggior parte delle volte erano pari a A
ma in alcuni casi non erano . Per quasi tutti i personaggi, ma non tutti i personaggi.
E dalle cronologie dell'editing non sembrava che uno solo di questi fosse mai stato modificato o modificato nel corso dei 18 anni, a causa di quello che dovrebbe essere ovvio, la ragione è che spezzerebbe troppe cose che non erano rintracciabili, quindi tu avere nuovi nomi di variabili che puntano alla stessa cosa che non può mai essere cambiata per lo stesso motivo.
In nessuna realtà sensata puoi affermare che questa pratica non sta facendo altro che partire alla massima entropia.
Ho rifattorizzato tutto questo casino e ho delineato tutte le tautologie e le nuove assunzioni al college sono state molto più produttive perché non dovevano dare la caccia a più livelli di riferimento indiretto su cosa questi riferimenti di const
puntassero effettivamente, perché non erano affidabile in ciò che sono stati nominati rispetto a ciò che contenevano.