Лично я бы использовал SECS_PER_MIN, SECS_PER_HOUR и т. Д. Мне даже было известно, что иногда использовал NANOS_PER_SEC. Я всегда делал бы это, если бы в языке не было научной нотации целочисленных литералов.
Речь идет не о читабельности. Причина использования SECS_PER_DAY вместо 86400 заключается не только в том, какие общие знания мы ожидаем от читателя. Речь идет о самодокументирующемся коде, который означает однозначную демонстрацию вашей работы.
Конечно, все знают, что есть 60 секунд в минуту. Но они также знают, что есть 60 минут в час. Если вы используете литерал 60, вероятно, очевидно, для чего предназначен ваш код. Но зачем рисковать?
Если вы используете SECS_PER_MIN, то совершенно очевидно, что вы конвертируете время в минутах (в вашем примере всего 1 минуту) в время в секундах. Например, вы не добавляете один час к времени, измеренному в минутах, или один градус к углу в минутах. Вы не добавляете 5 футов к длине, измеряемой в дюймах.
Именованные константы предоставляют больше контекста для окружающего кода. Для вашего примера добавления времени мы просто знаем по одной строке, что $ x должно быть временем в секундах. Название константы повторяет, что $ x - это не время в миллисекундах, или такты, или микрофины. Это облегчает для всех проверку и поддержание правильности единиц: они могут сказать, что то, что вы намеревались сделать, это то, что вы на самом деле сделали. Им даже не нужно даже думать о том, что вы намеревались добавить 60 миллисекунд к времени, измеренному в миллисекундах, но ошиблись, потому что $ x фактически был в секундах.
Именованные константы также помогают избежать опечаток. Конечно, все знают, что в день есть 86400 секунд. Из этого не обязательно следует, что они не будут опечатывать это как 84600, или что они сразу же обнаружат ошибку, если кто-то другой обнаружит. Конечно, у вас есть полное тестирование, поэтому такая ошибка никогда не попадет в поле, но самый эффективный способ ее исправить - это предотвратить ошибочный код, который в первую очередь проверяет его. Поэтому я бы определил константы, как это (или любой другой синтаксис):
SECS_PER_MIN := 60;
SECS_PER_HOUR := 60 * SECS_PER_MIN;
SECS_PER_DAY := 24 * SECS_PER_HOUR;
SECS_PER_WEEK := 7 * SECS_PER_DAY;
Или, если в любом случае нужны были другие константы (чего в случае времени они, вероятно, не сделали бы, потому что при первой возможности вы нормализуете все в секунды, чтобы уменьшить вероятность путаницы):
SECS_PER_MIN := 60;
MINS_PER_HOUR := 60;
HOURS_PER_DAY := 24;
DAYS_PER_WEEK := 7;
SECS_PER_HOUR := SECS_PER_MIN * MINS_PER_HOUR;
etc.
Обратите внимание на порядок на RHS: минуты явно «отменяются», делая работу еще более четкой. Не так уж сложно со временем, но хорошо установить согласованную схему на ранней стадии, чтобы, когда дела пойдут на спад позже (CLOCKS_PER_SEC, PLANCK_LENGTHS_PER_PARSEC), вы могли сделать это правильно, используя знакомые приемы.