Quello che vuoi veramente è eliminare i riferimenti nauseum alle costanti, indipendentemente dal fatto che siano nominati o nudi:
for_each_chess_square (row, col) {
/*...*/
}
Se stai effettivamente facendo proliferare la costante ripetendo tali cicli e quant'altro, è meglio restare fedeli a 8
.
8
è auto-descrittivo; non è una macro che sta per qualcos'altro.
Non lo farai mai (TM) trasformalo in un programma di scacchi 9x9 e se mai lo farai, la proliferazione di 8 non sarà la maggiore difficoltà.
Possiamo cercare una base di codice di linea di 150.000 per il token 8 e classificare quali occorrenze significano cosa in secondi.
Molto più importante è modulare il codice in modo che la conoscenza degli scacchi sia concentrata nel minor numero di posti possibile. È meglio avere uno, due, forse tre moduli specifici per scacchi in cui si verifica un letterale 8, di trentasette moduli legati alla responsabilità specifica degli scacchi, riferendosi a 8 attraverso un nome simbolico.
Quando o se questa costante 8 diventa una fonte di tensione nel tuo programma, puoi facilmente risolverlo in quel momento. Risolve i problemi reali che stanno accadendo ora. Se non ti senti ostacolato da quel particolare 8, segui quell'istinto.
Supponiamo che in futuro si desideri supportare dimensioni scheda alternative. In tal caso, tali loop dovranno cambiare se utilizzano una costante denominata o 8
, poiché le dimensioni verranno recuperate da alcune espressioni come board.width
e board.height
. Se hai BOARD_SIZE
anziché 8
, questi luoghi saranno più facili da trovare. Quindi questo è meno sforzo. Tuttavia, non devi dimenticare lo sforzo di sostituire 8
con BOARD_SIZE
in primo luogo. Lo sforzo complessivo non è inferiore. Fare un passaggio sul codice per cambiare 8
in BOARD_SIZE
, e poi un altro per supportare dimensioni alternative, non è più economico di andare da 8
a supporto di dimensioni alternative.
Possiamo anche considerare questo da un'analisi rischio / beneficio puramente fredda, oggettiva. Il programma ha costanti nude in esso ora. Se questi sono sostituiti da una costante, non vi è alcun vantaggio; il programma è identico. Con qualsiasi cambiamento, c'è un rischio diverso da zero. In questo caso, è piccolo. Tuttavia, nessun rischio dovrebbe essere preso senza un beneficio. Per "vendere" il cambiamento di fronte a questo ragionamento, dobbiamo ipotizzare un beneficio: un beneficio futuro che aiuterà con un programma diverso: una versione futura del programma che non esiste ora. Se un tale programma viene pianificato, questa ipotesi e il relativo ragionamento associato sono in buona fede e dovrebbero essere presi sul serio.
Ad esempio, se mancano pochi giorni all'aggiunta di altro codice che farà proliferare ulteriormente queste costanti, potresti volerle eliminare. Se quelle istanze delle costanti sono approssimativamente tutte le istanze che esisteranno, allora perché preoccuparsi.
Se lavori su un software commerciale, si applicheranno anche gli argomenti del ROI. Se un programma non viene venduto e la modifica di alcuni numeri codificati in costanti non migliorerà le vendite, non sarai ricompensato per lo sforzo. Il cambiamento ha zero ritorno sull'investimento di tempo. Gli argomenti del ROI si generalizzano al di là del denaro. Hai scritto un programma, investendo tempo e fatica, e ne hai ricavato qualcosa: questo è il tuo ritorno, la tua "R". Se facendo questo cambiamento da solo, si ottiene più di quella "R", qualunque essa sia, quindi con tutti i mezzi. Se hai qualche piano per ulteriori sviluppi, e quel cambiamento migliora la tua "R", idem. Se la modifica non ha alcuna "R" immediata o prevedibile per te, dimenticala.