É muito claro que, se você ler a primeira frase da pergunta, não se trata de usos apropriados, como
eliminar números mágicos , mas de uma
consistência tola, terrível e irracional, na melhor das hipóteses. Qual é o que esta resposta aborda
O senso comum diz-lhe que const char UPPER_CASE_A = 'A';
ou const char A = 'A'
não acrescenta nada, mas manutenção e complexidade ao seu sistema. const char STATUS_CODE.ARRIVED = 'A'
é um caso diferente.
As constantes devem representar coisas imutáveis em tempo de execução, mas podem precisar ser modificadas no futuro em tempo de compilação. Quando seria const char A =
igual a algo diferente A
?
Se você public static final char COLON = ':'
vir o código Java, encontre quem escreveu isso e quebre seus teclados. Se a representação COLON
mudar para sempre, :
você terá um pesadelo de manutenção.
Ofuscação:
O que acontece quando alguém muda para, COLON = '-'
porque onde eles estão usando ele precisa de um -
lugar em todo lugar? Você vai escrever testes de unidade que dizem basicamente assertThat(':' == COLON)
para cada const
referência para garantir que não sejam alterados? Apenas para alguém corrigir o teste quando eles mudam?
Se alguém realmente argumenta que public static final String EMPTY_STRING = "";
é útil e benéfico, você apenas qualificou seus conhecimentos e os ignorou com segurança em todo o resto.
Ter todos os caracteres imprimíveis disponíveis com uma versão nomeada apenas demonstra que quem o fez não está qualificado para escrever código sem supervisão.
Coesão:
Também reduz artificialmente a coesão, porque afasta as coisas das que as usam e estão relacionadas a elas.
Na programação de computadores, coesão refere-se ao grau em que os elementos de um módulo pertencem um ao outro. Assim, a coesão mede a força do relacionamento entre partes da funcionalidade dentro de um determinado módulo. Por exemplo, em sistemas altamente coesos, a funcionalidade está fortemente relacionada.
Acoplamento:
Ele também reúne muitas classes não relacionadas, porque todas acabam referenciando arquivos que não estão realmente relacionados ao que fazem.
Acoplamento apertado ocorre quando um grupo de classes é altamente dependente um do outro. Esse cenário surge quando uma classe assume muitas responsabilidades ou quando uma preocupação é espalhada por muitas classes em vez de ter sua própria classe.
Se você usasse um nome melhor como DELIMITER = ','
você ainda teria o mesmo problema, porque o nome é genérico e não possui semântica. A reatribuição do valor não ajuda mais a fazer uma análise de impacto do que procurar e substituir o literal ','
. Porque o que é que algum código usa e precisa de ,
outros códigos, mas precisa ;
agora? Ainda tem que olhar para cada uso manualmente e alterá-los.
Na natureza:
Recentemente refatorei um 1,000,000+ LOC
aplicativo com 18 anos de idade. Tinha coisas assim public static final COMMA = SPACE + "," + SPACE;
. Isso não é nada melhor do que apenas indicar " , "
onde é necessário.
Se você quiser discutir a legibilidade, precisa aprender a configurar seu IDE para exibir whitespace
caracteres onde possa vê-los ou o que quer que seja, esse é apenas um motivo extremamente preguiçoso para introduzir entropia em um sistema.
Ele também havia ,
definido várias vezes com vários erros de ortografia da palavra COMMA
em vários pacotes e classes. Com referências a todas as variações misturadas no código. Não era nada menos que um pesadelo tentar consertar algo sem quebrar algo completamente não relacionado.
Mesmo com o alfabeto, havia múltiplos UPPER_CASE_A
, A
, UPPER_A
, A_UPPER
que na maioria das vezes eram iguais A
, mas em alguns casos não foram . Para quase todos os personagens, mas nem todos os personagens.
E a partir das histórias de edição, não parecia que uma única delas fosse editada ou alterada ao longo dos 18 anos, por causa do que agora deveria ser uma razão óbvia, seria que ela quebraria muitas coisas que não eram rastreáveis, assim você tem uma nova variável nomes apontando para a mesma coisa que nunca pode ser alterada pelo mesmo motivo.
Em nenhuma realidade sadia você pode argumentar que esta prática não está fazendo nada, mas começando na entropia máxima.
Refatorei toda essa bagunça e delineei todas as tautologias e as novas contratações da faculdade eram muito mais produtivas porque não precisavam caçar através de vários níveis de indireção o que essas const
referências realmente apontavam, porque não eram confiáveis no que eram chamadas vs o que eles continham.