Che cosa si vuole veramente è quello di eliminare fino alla nausea i riferimenti a costanti, siano essi nominati o nudo:
for_each_chess_square (row, col) {
/*...*/
}
Se in realtà stai per proliferare la costante ripetendo tali cicli e quant'altro, è meglio attenersi 8
.
8
si auto-descrive; non è una macro che sta per qualcos'altro.
You Ain't Never Gonna (TM) lo trasforma 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 150.000 righe per il token 8 e classificare quali occorrenze significano cosa in pochi 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 degli scacchi in cui si verifica un 8 letterale, piuttosto che trentasette moduli intrecciati con responsabilità specifiche degli scacchi, riferendosi a 8 con un nome simbolico.
Quando o se questa costante 8 diventa una fonte di tensione nel tuo programma, puoi facilmente risolverlo in quel momento. Risolvi i problemi reali che stanno accadendo ora. Se non senti di essere ostacolato da quel particolare 8, segui quell'istinto.
Supponiamo che in futuro desideri supportare dimensioni alternative della scheda. In quel caso, quei loop dovranno cambiare se usano una costante nominata o 8
, perché le dimensioni saranno recuperate da alcune espressioni come board.width
e board.height
. Se BOARD_SIZE
invece hai 8
, questi luoghi saranno più facili da trovare. Quindi questo è meno sforzo. Tuttavia, non devi dimenticare lo sforzo di sostituirlo 8
con BOARD_SIZE
in primo luogo. Lo sforzo complessivo non è inferiore. Fare un passaggio sul codice per passare 8
a BOARD_SIZE
, e poi un altro per supportare dimensioni alternative, non è più economico che passare da 8
un supporto per dimensioni alternative.
Possiamo anche considerare questo da un'analisi del rischio / beneficio puramente fredda e obiettiva. Il programma contiene costanti nude adesso. Se questi sono sostituiti da una costante, non ci sono benefici; il programma è identico. Con qualsiasi modifica, esiste 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 vantaggio: un vantaggio futuro che aiuterà con un programma diverso: una versione futura del programma che non esiste ora. Se viene pianificato un programma del genere, questa ipotesi e il relativo ragionamento sono in buona fede e dovrebbero essere presi sul serio.
Ad esempio, se ti mancano pochi giorni per aggiungere altro codice che prolifererà ulteriormente queste costanti, potresti voler eliminare. Se quelle istanze delle costanti sono approssimativamente tutte le istanze che possano mai esistere, perché preoccuparsi.
Se lavori su software commerciale, verranno applicati anche gli argomenti ROI. Se un programma non sta vendendo e la modifica di alcuni numeri con codice fisso in costanti non migliorerà le vendite, non sarai compensato per lo sforzo. La modifica ha un ritorno zero sull'investimento di tempo. Gli argomenti del ROI si generalizzano oltre il denaro. Hai scritto un programma, investendo tempo e fatica, e ne hai tratto qualcosa: questo è il tuo ritorno, la tua "R". Se apportando quel cambiamento da solo, ottieni di più di quella "R", qualunque essa sia, allora sicuramente. Se hai qualche piano per un ulteriore sviluppo e quel cambiamento migliora la tua "R", idem. Se la modifica non ha una "R" immediata o prevedibile per te, dimenticala.