Совершенно ясно, если вы прочитаете самое первое предложение вопроса, что этот вопрос не о подходящих целях, таких как
устранение магических чисел , а о ужасной бессмысленной глупой
последовательности в лучшем случае. К чему относится этот ответ
Здравый смысл говорит вам, что const char UPPER_CASE_A = 'A';
или const char A = 'A'
не добавляет ничего, кроме обслуживания и сложности вашей системы. const char STATUS_CODE.ARRIVED = 'A'
это другой случай.
Предполагается, что константы представляют вещи, которые являются неизменными во время выполнения, но, возможно, потребуется изменить их в будущем во время компиляции. Когда будет const char A =
правильно равен чему-либо, кроме A
?
Если вы видите public static final char COLON = ':'
в коде Java, найдите того, кто это написал, и сломайте его клавиатуру. Если представление COLON
навсегда изменится у :
вас будет кошмар обслуживания.
Obfuscation:
Что происходит, когда кто-то меняет его, COLON = '-'
потому что там, где они его используют, нужен -
везде? Собираетесь ли вы писать модульные тесты, которые в основном говорят assertThat(':' == COLON)
для каждой const
ссылки, чтобы убедиться, что они не меняются? Только чтобы кто-то исправил тест, когда он их поменял?
Если кто-то действительно утверждает, что public static final String EMPTY_STRING = "";
это полезно и полезно, вы просто квалифицируете его знания и спокойно игнорируете их во всем остальном.
Наличие каждого печатного символа, доступного в именованной версии, просто демонстрирует, что тот, кто это сделал, не может писать код без присмотра.
Сплоченность:
Это также искусственно снижает сплоченность, потому что оно отдаляет вещи от вещей, которые их используют, и связано с ними.
В компьютерном программировании сплоченность относится к степени, в которой элементы модуля принадлежат друг другу. Таким образом, когезия измеряет силу взаимосвязи между частями функциональности в данном модуле. Например, в высоко связных системах функциональность тесно связана.
Связь:
Он также объединяет множество не связанных между собой классов, поскольку все они в конечном итоге ссылаются на файлы, которые на самом деле не связаны с тем, что они делают.
Тесная связь - это когда группа классов сильно зависит друг от друга. Этот сценарий возникает, когда класс принимает на себя слишком много обязанностей или когда одна проблема распространяется на многие классы, а не на собственный класс.
Если вы используете более подходящее имя, как у DELIMITER = ','
вас, у вас все равно будет та же проблема, потому что имя является общим и не несет семантики. Переназначение значения не более помогает анализу воздействия, чем поиск и замена литерала ','
. Потому что какой-то код использует его и нуждается в ,
каком-то другом коде, но нуждается ;
сейчас? Все равно придется смотреть на каждое использование вручную и менять их.
В дикой природе:
Я недавно провела рефакторинг 1,000,000+ LOC
приложения, которому было 18 лет. У него были такие вещи, как public static final COMMA = SPACE + "," + SPACE;
. Это ни в коем случае не лучше, чем просто указывать, " , "
где это необходимо.
Если вы хотите аргументировать читабельность, вам нужно научиться настраивать свою среду IDE для отображения whitespace
символов, где вы можете их видеть или что-то еще, - это просто ленивая причина для введения энтропии в систему.
Он также ,
определен несколько раз с несколькими ошибками в написании слова COMMA
в нескольких пакетах и классах. Со ссылками на все варианты, смешанные вместе в коде. Это был не что иное, как кошмар, чтобы попытаться что-то исправить, не сломав что-то совершенно не связанное.
То же самое с алфавитом, было несколько UPPER_CASE_A
, A
, UPPER_A
, A_UPPER
что большую часть времени были равны , A
но в некоторых случаях не было . Почти для каждого персонажа, но не для всех персонажей.
И из историй редактирования не было видно, что ни один из них когда-либо редактировался или изменялся в течение 18 лет, потому что теперь должно быть очевидной причиной, что он сломает слишком много вещей, которые невозможно отследить, поэтому у вас есть новая переменная имена, указывающие на одну и ту же вещь, которая никогда не может быть изменена по той же причине.
Ни в одной разумной реальности вы не можете утверждать, что эта практика ничего не делает, а начинается с максимальной энтропии.
Я реорганизовал всю эту путаницу и выделил все тавтологии, и новые поступления в колледж были гораздо более продуктивными, потому что им не приходилось выслеживать многочисленные уровни косвенности, на что на const
самом деле указывали эти ссылки, потому что они не были надежны в том, что их назвали против того, что они содержали.