Ce que vous voulez vraiment, c'est éliminer les références ad nauseum aux constantes, qu'elles soient nommées ou non:
for_each_chess_square (row, col) {
/*...*/
}
Si vous voulez réellement multiplier la constante en répétant de telles boucles, etc., il est préférable de vous en tenir à 8
.
8
se décrit lui-même; ce n'est pas une macro qui représente autre chose.
Vous ne le transformerez jamais (TM) en programme d'échecs 9x9 et si vous le faites déjà, la prolifération de 8 ne sera pas la principale difficulté.
Nous pouvons rechercher une base de codes de 150 000 lignes pour le jeton 8 et classer quelles occurrences signifient quoi en secondes.
Le plus important est de modulariser le code afin que la connaissance des échecs soit concentrée dans le moins d'endroits possible. Il vaut mieux avoir un, deux, voire trois modules spécifiques aux échecs dans lesquels se trouve un 8 littéral, que trente-sept modules avec une responsabilité spécifique aux échecs, faisant référence à 8 par un nom symbolique.
Quand ou si cette constante devient une source de tension dans votre programme, vous pouvez facilement la corriger à ce moment-là. Résoudre les problèmes réels qui se produisent maintenant. Si vous ne sentez pas que cela vous gêne, optez pour cet instinct.
Supposons qu'à l'avenir, vous souhaitiez prendre en charge d'autres dimensions de conseil. Dans ce cas, ces boucles devront changer si elles utilisent une constante nommée ou 8
, car les dimensions seront récupérées par une expression telle que board.width
et board.height
. Si vous avez BOARD_SIZE
au lieu de 8
, ces endroits seront plus faciles à trouver. Donc, c'est moins d'effort. Cependant, vous ne devez pas oublier l'effort de remplacer 8
par BOARD_SIZE
. L'effort global n'est pas inférieur. Faire une passe sur le code de changement 8
à BOARD_SIZE
, puis une autre pour soutenir d' autres dimensions, n'est pas moins cher que simplement aller de8
l'appui de dimension alternative.
Nous pouvons également examiner cette question à partir d’une analyse objective objective des risques et des avantages. Le programme contient maintenant des constantes nues. Si ceux-ci sont remplacés par une constante, il n'y a aucun avantage; le programme est identique. Avec tout changement, il y a un risque non nul. Dans ce cas, c'est petit. Pourtant, aucun risque ne devrait être pris sans bénéfice. Pour "vendre" le changement face à ce raisonnement, nous devons émettre l'hypothèse d'un avantage: un avantage futur qui aidera avec un programme différent: une version future du programme qui n'existe pas maintenant. Si un tel programme est planifié, cette hypothèse et le raisonnement associé sont de bonne foi et doivent être pris au sérieux.
Par exemple, si vous êtes à quelques jours de l'ajout de code supplémentaire qui générera une prolifération accrue de ces constantes, vous pouvez les supprimer. Si ces instances des constantes sont approximativement toutes les instances qui existeront, pourquoi s'en préoccuper?
Si vous travaillez sur des logiciels commerciaux, les arguments de retour sur investissement s'appliqueront également. Si un programme ne se vend pas et que changer certains nombres codés en dur en constantes n'améliorera pas les ventes, vous ne serez pas rémunéré pour l'effort fourni. Le changement n'a aucun retour sur l'investissement en temps. Les arguments de retour sur investissement se généralisent au-delà de l'argent. Vous avez écrit un programme, vous avez investi du temps et de l’effort et vous en avez tiré quelque chose: c’est votre retour, votre "R". Si en effectuant ce changement seul, vous obtenez plus de ce "R", quoi que ce soit, alors bien sûr. Si vous avez des projets de développement, et que ce changement améliore votre "R", idem. Si le changement n'a pas de «R» immédiat ou prévisible, oubliez-le.