Те, що ви насправді хочете, - це усунути посилання на константи ad nauseum , незалежно від того, чи вони названі чи голими:
for_each_chess_square (row, col) {
/*...*/
}
Якщо ви насправді збираєтеся розповсюджувати константу, повторюючи подібні петлі та багато чого іншого, краще дотримуватися цього 8
.
8
є самоописуванням; це не макрос, який означає щось інше.
Ви Ain't Never Gonna (TM) перетворите це на шахову програму 9х9, і якщо ви коли-небудь це зробите, поширення 8 не складе великих труднощів.
Ми можемо шукати 150 000 баз лінійного коду для маркера 8 і класифікувати, які події означають, що за секунди.
Набагато важливіше - модулювати код, щоб шахові знання були сконцентровані в якомога менше місцях. Краще мати один, два, можливо три шахових модулі, в яких відбувається буквальне 8, ніж тридцять сім модулів, покритих певною шаховою відповідальністю, посилаючись на 8 через символічну назву.
Коли ця 8 константа стане джерелом напруги у вашій програмі, ви можете її легко виправити на той час. Виправте реальні проблеми, які зараз відбуваються. Якщо ви не відчуваєте, що вас заважає саме ця 8, ідіть з цим інстинктом.
Припустимо, що в майбутньому ви хочете підтримати альтернативні розміри плати. У цьому випадку ці петлі повинні будуть змінити, чи вони використовують іменну константу, або 8
, оскільки розміри будуть отримані за допомогою якогось виразу, як board.width
і board.height
. Якщо у вас BOARD_SIZE
замість цього 8
, ці місця буде легше знайти. Так що менше зусиль. Тим НЕ менше, ви не повинні забувати про зусиллі заміни 8
з BOARD_SIZE
в першу чергу. Загальні зусилля не нижче. Створення одного проходу по коду для зміни 8
до BOARD_SIZE
, а потім інший , щоб підтримувати альтернативні розміри, не дешевше , ніж просто перехід від 8
альтернативної підтримки виміру.
Ми також можемо переконатися в цьому з чисто холодного об'єктивного аналізу ризику / вигоди. У програмі зараз голі константи. Якщо їх замінити постійними, користі немає; програма ідентична. При будь-яких змінах виникає ненульовий ризик. У цьому випадку вона невелика. Проте жоден ризик не повинен сприйматись без користі. Щоб "продати" зміну перед цією міркуванням, ми маємо гіпотезувати перевагу: майбутню вигоду, яка допоможе з іншою програмою: майбутня версія програми, яка зараз не існує. Якщо така програма планується, ця гіпотеза та пов'язане з цим міркування є добросовісними і слід сприймати їх серйозно.
Наприклад, якщо вам не вистачає днів, коли ви додасте більше коду, який ще більше поширить ці константи, можливо, ви захочете їх усунути. Якщо ці екземпляри констант - це приблизно всі екземпляри, які коли-небудь існуватимуть, то навіщо турбуватись.
Якщо ви коли-небудь працюєте над комерційним програмним забезпеченням, застосовуватимуться також аргументи ROI. Якщо програма не продається, а зміна деяких жорстко зафіксованих цифр на константи не покращить продажі, ви не будете компенсовані зусиллями. Зміна має нульову віддачу від вкладення часу. Аргументи рентабельності інвестицій узагальнюють понад гроші. Ви написали програму, вклавши час і зусилля, і щось із неї вийшло: ось ваше повернення, ваше "R". Якщо внести цю зміну поодинці, ви отримаєте більше того "R", яким би воно не було, то будь-якими способами. Якщо у вас є якийсь план для подальшого розвитку, і ця зміна покращує ваше "R", детто. Якщо зміна не має для вас негайного або передбачуваного "R", забудьте про це.