Вершина того, що інші відповіді зрозуміли, полягає не в тому, що "магічні значення" погані, а в тому, що вони повинні бути:
- визначені визнано як константи;
- визначено лише один раз у межах усієї сфери їх використання (якщо можливо архітектурно);
- визначені разом, якщо вони утворюють набір констант, які якимось чином пов'язані між собою;
- визначені на відповідному рівні спільності в додатку, в якому вони використовуються; і
- визначені таким чином, щоб обмежити їх використання у невідповідних контекстах (наприклад, піддаються перевірці типу).
Те, що зазвичай відрізняє прийнятні "константи" від "магічних значень", є деяким порушенням одного або декількох із цих правил.
Добре використовувані константи дозволяють нам висловити певні аксіоми нашого коду.
Що підводить мене до остаточного моменту, що надмірне використання констант (а отже, надмірна кількість припущень чи обмежень, виражених у значеннях), навіть якщо воно інакше відповідає вищезазначеним критеріям (але особливо, якщо воно відхиляється від них), може означати, що розроблене рішення не є достатньо загальним чи добре структурованим (і тому ми вже не говоримо вже про плюси і мінуси констант, а про плюси і мінуси добре структурованого коду).
Мови високого рівня мають конструкції для моделей мов нижчого рівня, які повинні використовувати константи. Ті ж зразки можуть бути використані і в мові вищого рівня, але цього не повинно бути.
Але це може бути експертне судження, яке базується на враженні всіх обставин, і як має виглядати рішення, і як саме це рішення буде виправдане, буде сильно залежати від контексту. Дійсно, це не може бути виправданим з точки зору будь-якого загального принципу, за винятком твердження "Я досить старий, щоб уже бачив таку роботу, з якою я знайомий, зробив краще"!
EDIT: прийнявши одну редакцію, відхилив іншу та виконавши власну редагування, чи можу я тепер вважати стиль форматування та пунктуації мого списку правил врегульованим раз і назавжди ха-ха!