很清楚,如果您读到该问题的第一句话,则该问题与
消除魔术数字之
类的适当用途无关,充其量只是关于可怕的无意识愚蠢的一致性。这个答案要解决的是
常识告诉你,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
永远发生变化,:
您将面临一场维修噩梦。
混淆:
当某人将其更改为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
引用实际指向的多个间接层级进行搜寻,因为它们在命名方面并不可靠与它们包含的内容。