O que você realmente deseja é eliminar as referências ad nauseum às constantes, sejam elas nomeadas ou nuas:
for_each_chess_square (row, col) {
/*...*/
}
Se você realmente proliferar a constante repetindo esses loops e outros enfeites, é melhor ficar com ele 8
.
8
é auto-descritivo; não é uma macro que representa outra coisa.
Você nunca vai transformá-lo em um programa de xadrez 9x9 e, se o fizer, a proliferação de 8 não será a maior dificuldade.
Podemos pesquisar uma base de código de 150.000 linhas para o token 8 e classificar quais ocorrências significam o que em segundos.
Muito mais importante é modularizar o código para que o conhecimento do xadrez se concentre no menor número de lugares possível. É melhor ter um, dois, talvez três módulos específicos de xadrez nos quais ocorra um 8 literal, do que trinta e sete módulos ligados a responsabilidades específicas de xadrez, referindo-se a 8 através de um nome simbólico.
Quando ou se essa constante se tornar uma fonte de tensão em seu programa, você poderá corrigi-lo facilmente naquele momento. Corrija problemas reais que estão acontecendo agora. Se você não sente que está sendo prejudicado por esse 8 em particular, siga esse instinto.
Suponha que no futuro você queira oferecer suporte a dimensões alternativas da placa. Nesse caso, esses loops terão que mudar se eles usam uma constante nomeada ou 8
, porque as dimensões serão recuperadas por alguma expressão como board.width
e board.height
. Se você tiver, em BOARD_SIZE
vez de 8
, esses lugares serão mais fáceis de encontrar. Então isso é menos esforço. No entanto, você não deve esquecer-se sobre o esforço de substituir 8
com BOARD_SIZE
em primeiro lugar. O esforço geral não é menor. Fazer uma passagem sobre o código para alterar 8
e BOARD_SIZE
, depois, outra para dar suporte a dimensões alternativas, não é mais barato do que apenas passar 8
para o suporte de dimensão alternativa.
Também podemos analisar isso a partir de uma análise de risco / benefício puramente fria e objetiva. O programa tem constantes nuas agora. Se estes são substituídos por uma constante, não há benefício; o programa é idêntico. Com qualquer alteração, há um risco diferente de zero. Nesse caso, é pequeno. Ainda assim, nenhum risco deve ser assumido sem um benefício. Para "vender" a mudança em face desse raciocínio, temos a hipótese de um benefício: um benefício futuro que ajudará em um programa diferente: uma versão futura do programa que não existe agora. Se um programa desse tipo estiver sendo planejado, essa hipótese e seu raciocínio associado são de boa-fé e devem ser levados a sério.
Por exemplo, se você está a dias de adicionar mais código que proliferará ainda mais essas constantes, convém acabar com elas. Se essas instâncias das constantes são aproximadamente todas as instâncias que existirão, por que se preocupar?
Se você trabalhar em software comercial, os argumentos de ROI também serão aplicados. Se um programa não estiver sendo vendido e a alteração de alguns números codificados para constantes não melhorar as vendas, você não será compensado pelo esforço. A mudança tem retorno zero sobre o investimento de tempo. Os argumentos de ROI generalizam além do dinheiro. Você escreveu um programa, investindo tempo e esforço, e conseguiu algo com isso: esse é seu retorno, seu "R". Se, ao fazer essa alteração sozinha, você obtém mais desse "R", seja o que for, então, por todos os meios. Se você tem algum plano para desenvolvimento adicional, e essa alteração melhora o seu "R", o mesmo. Se a mudança não tiver um "R" imediato ou previsível para você, esqueça.