È molto chiaro se leggi la prima frase della domanda che questa domanda non riguarda usi appropriati come l'
eliminazione dei numeri magici , si tratta
al massimo di una terribile insensatezza insensata . È a questo che risponde questa risposta
Il buon senso vi dice che const char UPPER_CASE_A = 'A';
o const char A = 'A'
non aggiunge nulla, ma la manutenzione e la complessità al sistema. const char STATUS_CODE.ARRIVED = 'A'
è un caso diverso.
Le costanti dovrebbero rappresentare elementi immutabili in fase di esecuzione, ma potrebbe essere necessario modificarli in futuro al momento della compilazione. Quando equivarrebbe const char A =
correttamente a qualcosa di diverso da A
?
Se vedi public static final char COLON = ':'
nel codice Java, trova chi lo ha scritto e spezza le sue tastiere. Se la rappresentazione per COLON
sempre cambia da :
te avrà un incubo di manutenzione.
Offuscazione:
Cosa succede quando qualcuno lo cambia COLON = '-'
perché dove lo usano ha bisogno di un -
invece ovunque? Scriverai test unitari che dicono sostanzialmente assertThat(':' == COLON)
per ogni singolo const
riferimento per assicurarti che non vengano modificati? Solo qualcuno deve risolvere il test quando lo cambia?
Se qualcuno sostiene effettivamente che public static final String EMPTY_STRING = "";
è utile e benefico, hai appena qualificato le loro conoscenze e ignorato in modo sicuro tutto il resto.
Avere tutti i caratteri stampabili disponibili con una versione con nome dimostra solo che chiunque lo abbia fatto, non è qualificato per scrivere codice senza supervisione.
Coesione:
Riduce anche artificialmente la coesione, perché allontana le cose dalle cose che le usano e sono correlate ad esse.
Nella programmazione informatica, la coesione si riferisce al grado in cui gli elementi di un modulo appartengono insieme. Pertanto, la coesione misura la forza della relazione tra elementi di funzionalità all'interno di un dato modulo. Ad esempio, nei sistemi altamente coesivi la funzionalità è fortemente correlata.
accoppiamento:
Abbina anche molte classi non correlate perché finiscono per fare riferimento a file che non sono realmente correlati a ciò che fanno.
Lo stretto accoppiamento avviene quando un gruppo di classi dipende fortemente l'uno dall'altro. Questo scenario si presenta quando una classe si assume troppe responsabilità o quando una preoccupazione è ripartita su più classi anziché avere una propria classe.
Se avessi usato un nome migliore come DELIMITER = ','
quello avresti comunque lo stesso problema, perché il nome è generico e non porta semantico. Riassegnare il valore non aiuta più a fare un'analisi di impatto che cercare e sostituire il valore letterale ','
. Perché qual è un codice che lo utilizza e necessita ,
dell'utilizzo di un altro codice, ma ;
ora è necessario ? Devo ancora guardare ogni uso manualmente e cambiarli.
Nella natura selvaggia:
Di recente ho riformulato una 1,000,000+ LOC
domanda di 18 anni. Aveva cose del genere public static final COMMA = SPACE + "," + SPACE;
. Questo non è in alcun modo migliore del solo indicare " , "
dove è necessario.
Se vuoi discutere di leggibilità devi imparare a configurare il tuo IDE per visualizzare i whitespace
personaggi dove puoi vederli o altro, questa è solo una ragione estremamente pigra 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 varianti mescolate insieme nel codice. È stato a dir poco un incubo provare a riparare qualcosa senza rompere qualcosa di completamente estraneo.
Stessa cosa con l'alfabeto, ci sono stati molteplici UPPER_CASE_A
, A
, UPPER_A
, A_UPPER
che la maggior parte del tempo sono stati pari a A
ma in alcuni casi non erano . Per quasi tutti i personaggi, ma non per tutti i personaggi.
E dalle storie di modifica non sembrava che uno solo di questi fosse mai stato modificato o cambiato nel corso dei 18 anni, a causa di ciò che ora dovrebbe essere la ragione ovvia è che spezzerebbe troppe cose che non erano rintracciabili, quindi hai una nuova variabile nomi che indicano la stessa cosa che non possono mai essere cambiati per lo stesso motivo.
In nessuna realtà sana puoi sostenere che questa pratica non sta facendo altro che iniziare alla massima entropia.
Ho riformulato tutta questa confusione e sottolineato tutte le tautologie e le nuove assunzioni del college erano molto più produttive perché non dovevano dare la caccia attraverso più livelli di const
riferimento indiretto a ciò che effettivamente indicavano questi riferimenti, perché non erano affidabili in come erano chiamati vs ciò che contenevano.