Здесь мы не так уверены. Действительно ли программист не хотел, чтобы эта строка была локализована, или программист забыл о локализации, когда писал этот код?
ий наЯвляются ли когда-нибудь жесткие литералы приемлемыми?Но я специально думаю о «волшебных струнах» здесь.
В большом проекте у нас есть таблица параметров конфигурации:
Name Value
---- -----
FOO_ENABLED Y
BAR_ENABLED N
...
(Сотни из них).
Обычной практикой является вызов универсальной функции для проверки такой опции:
if (config_options.value('FOO_ENABLED') == 'Y') ...
(Конечно, эту же опцию может потребоваться проверить во многих местах системного кода.)
При добавлении новой опции я подумывал добавить функцию, чтобы скрыть «волшебную строку», например:
if (config_options.foo_enabled()) ...
Однако коллеги подумали, что я ушел за борт, и возражали против этого, предпочитая жесткое кодирование, потому что:
Это то, что мы обычно делаемЭто облегчает увидеть, что происходит при отладке кодаПроблема в том, что я вижу их точку зрения! На самом деле, мы никогда не собираемся переименовывать параметры по любой причине, поэтому единственное преимущество, которое я могу придумать для своей функции, заключается в том, что компилятор будет перехватывать любую опечатку, например, fo_enabled (), но не «FO_ENABLED».
Как вы думаете? Я пропустил какие-либо другие преимущества / недостатки?