Одной из причин является помощь в обслуживании. Допустим, вы застряли в темноте, и ваша программа графических манипуляций работает только с дискетами 1,4M.
Вы получаете запрос на обработку новомодных дискет 2.8M и думаете: «Ха, мне просто нужно найти код, ищущий 1440 и заменяющий его на 2880. Простой, а?».
К сожалению, будучи графической программой, 1440 - это также число сдвигов в дюйме, поэтому вы обнаружите, что после масштабного глобального поиска и замены не только вы можете обрабатывать большие диски, но и все ваши изображения имеют неправильный размер на экране. D'Oh!
Теперь вам нужно вернуться назад и выяснить , какие из этих 1440
строк были для размера диска, а какие для размера изображения.
Если вы только что разработали свой код следующим образом:
#define TWIPS_PER_INCH 1440
#define DISK_SZ 1440
Вы могли бы сделать изменение намного проще, просто изменив эту константу в одном месте, не затрагивая все другие константы с тем же значением.
Короткий ответ: именованные константы значительно облегчают вашу жизнь. Это действительно должно быть достаточной причиной для их использования.
Некоторые экстремисты будут настаивать на том, что единственными жестко закодированными константами, которые вы должны когда-либо иметь в своей программе, являются -1, 0 и 1 - некоторые пойдут еще дальше, но мы можем сбрасывать со счетов бредовые точки :-) Я не совсем так но я думаю, что это хорошая идея - избегать их как можно больше.
Одна вещь, которую я нахожу забавной, это люди, которые делают такие вещи, как:
#define SEVENTY_TWO 72
Я не совсем уверен, что они думают, что они получают от этого, но я действительно получил это однажды в ответ на комментарий, который я сделал в обзоре кода о жестко закодированном 72
(я могу смеяться над этим сейчас но я был не слишком счастлив на второй обзорной встрече).
Другая причина - сделать код более читабельным. Если у вас нет математического опыта, вы будете в растерянности, когда увидите в своем коде константу типа 1.414
. Однако символ SQR_ROOT_OF_2
, вероятно, будет гораздо более понятным. То же самое с большинством других констант, например:
SECS_PER_DAY 86400
CUST_ADDR_LINES 7
INVALID_ID -1
DAYS_PER_CENTURY 36524
PASS_LEVEL 63
MIN_REPUTATION 10000
MAX_LOAN_AMT 200000
Вы бы предпочли, чтобы код с этими цифрами справа разбросан по всему, или вы бы предпочли прочитать код, в котором намерение лучше представлено?