Что вам действительно нужно, так это исключить ссылки на тошноту до констант, независимо от того, названы они или нет:
for_each_chess_square (row, col) {
/*...*/
}
Если вы на самом деле собираетесь распространять константу, повторяя такие циклы и еще много чего, лучше придерживаться 8
.
8
самоописывает; это не макрос, который обозначает что-то еще.
Ты никогда не собираешься превратить это в шахматную программу 9x9, и если ты когда-либо сделаешь, распространение 8 не будет главной трудностью.
Мы можем выполнить поиск по токену 8 в базе кода на 150 000 строк и определить, какие случаи означают то, что в секундах.
Гораздо важнее модульный код, чтобы знание шахмат концентрировалось как можно меньше. Лучше иметь один, два, может быть, три шахматно-специфических модуля, в которых встречается буквальное число 8, чем тридцать семь модулей, на которые возложена ответственность за шахматы, ссылаясь на 8 через символическое имя.
Когда или если эта 8 константа становится источником напряжения в вашей программе, вы можете легко это исправить в это время. Исправьте реальные проблемы, которые происходят сейчас. Если вы не чувствуете, что вам мешает именно эта восьмерка, следуйте этому инстинкту.
Предположим, что в будущем вы хотите поддерживать альтернативные размеры платы. В этом случае эти циклы должны измениться, независимо от того, используют ли они именованную константу или 8
, потому что измерения будут получены с помощью некоторого выражения, подобного board.width
и board.height
. Если у вас есть BOARD_SIZE
вместо того 8
, эти места будет легче найти. Так что это меньше усилий. Тем не менее, вы не должны забывать о усилии замены 8
с BOARD_SIZE
в первую очередь. Общее усилие не ниже. Создание одного прохода по коду для изменения 8
к BOARD_SIZE
, а затем другой , чтобы поддерживать альтернативные размеры, не дешевле , чем просто переход от 8
альтернативной поддержки измерения.
Мы также можем взглянуть на это из чисто холодного, объективного анализа рисков / выгод. В программе есть голые константы. Если они заменены константой, то никакой пользы нет; Программа идентична. С любым изменением существует ненулевой риск. В этом случае он маленький. Тем не менее, ни один риск не должен быть взят без выгоды. Чтобы «продать» изменения в свете этих рассуждений, мы должны предположить выгоду: будущую выгоду, которая поможет с другой программой: будущую версию программы, которой сейчас не существует. Если такая программа планируется, эта гипотеза и связанные с ней рассуждения являются добросовестными и должны приниматься всерьез.
Например, если у вас есть дни, чтобы добавить больше кода, который будет способствовать дальнейшему распространению этих констант, вы можете покончить с ними. Если эти экземпляры констант - это примерно все экземпляры, которые когда-либо будут существовать, тогда зачем?
Если вы когда-либо работаете с коммерческим программным обеспечением, аргументы ROI также будут применяться. Если программа не продается, а изменение некоторых жестко закодированных чисел на постоянные не улучшит продажи, вы не получите компенсацию за эти усилия. Изменение имеет нулевую отдачу от затрат времени. Аргументы ROI обобщают за деньги. Вы написали программу, вложив время и усилия, и получили из этого что-то: это ваше возвращение, ваше «R». Если, сделав это изменение в одиночку, вы получите больше этого «R», что бы это ни было, тогда непременно. Если у вас есть какой-то план дальнейшего развития, и это изменение улучшает ваш «R», то же самое. Если изменение не имеет немедленного или прогнозируемого «R» для вас, забудьте об этом.