Tautologia :
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
O senso comum informa que const char UPPER_CASE_A = 'A';
ou const char A = 'A'
não adiciona nada além de manutenção e complexidade ao seu sistema. const char STATUS_CODE.ARRIVED = 'A'
é um caso diferente.
Constantes devem representar coisas que são imutáveis em tempo de execução, mas podem precisar ser modificadas no futuro em tempo de compilação. Quando const char A =
seria corretamente igual a algo diferente de A
?
Se você vir public static final char COLON = ':'
no código Java, encontre quem escreveu isso e quebre seus teclados. Se a representação para COLON
mudar de :
, você terá um pesadelo de manutenção.
Ofuscação:
O que acontece quando alguém o altera para COLON = '-'
, porque onde eles estão usando ele precisa de um -
em todo lugar? Você vai escrever testes de unidade que digam basicamente assertThat(':' == COLON)
para cada referência de const
para garantir que eles não sejam alterados? Apenas para que alguém conserte o teste quando eles forem alterados?
Se alguém realmente argumentar que public static final String EMPTY_STRING = "";
é útil e benéfico, você apenas qualificou seu conhecimento e os ignorou com segurança sobre 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 não supervisionado.
Coesão:
Também reduz artificialmente a coesão, porque afasta as coisas das coisas que as usam e estão relacionadas a elas.
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.
Acoplamento:
Ele também une muitas classes não relacionadas, porque todas elas acabam referenciando arquivos que não estão realmente relacionados ao que eles fazem.
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 você usou um nome melhor como DELIMITER = ','
, você ainda teria o mesmo problema, porque o nome é genérico e não carrega nenhuma semântica. A reatribuição do valor não faz mais para ajudar a fazer uma análise de impacto do que pesquisar e substituir o literal ','
. Porque o que é algum código usa e precisa do ,
e algum outro código usa mas precisa de ;
agora? Ainda tem que olhar para cada uso manualmente e alterá-los.
Em estado selvagem:
Recentemente, refatorei um aplicativo 1,000,000+ LOC
com 18 anos de idade. Tinha coisas como public static final COMMA = SPACE + "," + SPACE;
. Isso não é de forma alguma melhor do que apenas inlining " , "
onde é necessário.
Se você quiser argumentar legibilidade você precisa aprender a configurar seu IDE para exibir whitespace
caracteres onde você possa vê-los ou o que for, isso é apenas uma razão extremamente preguiçosa para introduzir a entropia um sistema.
Ele também tinha ,
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 juntas no código. Não foi nada menos que um pesadelo tentar consertar algo sem quebrar algo completamente não relacionado.
Mesmo com o alfabeto, havia vários UPPER_CASE_A
, A
, UPPER_A
, A_UPPER
que na maioria das vezes eram iguais a A
mas em alguns casos não eram . Para quase todos os personagens, mas nem todos os personagens.
E a partir dos históricos de edição, não parece que um único deles tenha sido editado ou alterado ao longo de 18 anos, por causa do que agora deve ser óbvio, porque isso quebraria muitas coisas que não eram rastreáveis, assim você tem novos nomes de variáveis apontando para a mesma coisa que nunca pode ser alterada pelo mesmo motivo.
Em nenhuma realidade sensata, você pode argumentar que esta prática não está fazendo nada além de iniciar a entropia máxima.
Refatorizei toda essa bagunça e inlinei todas as tautologias e as novas contratações da faculdade foram muito mais produtivas porque elas não tinham que caçar através de vários níveis de indireção o que essas referências const
apontavam, porque elas não eram confiável em que eles foram nomeados vs o que eles continham.