我们用包含任意标点符号的任意字符串进行大量的词法处理。我分为是否使用魔法字符/字符串或符号常量。使用魔术字符串或常量处理标点符号?
应该将这些示例阅读为与语言无关,但大部分都是Java。
在有些情况下标点符号有语义的作用,应当认定为一个常数明显的例子:
File.separator
不"/"
或"\\"
; //不用理会,因为它依赖于操作系统
和我写的XML_PREFIX_SEPARATOR = ":"
;
但是让我们假设我需要用空字符串“`替换""
的所有示例。我可以这样写:
s = s.replaceAll("\"\"", "");
或
s = s.replaceAll(S_QUOT+S_QUOT, S_EMPTY);
(我已经定义了所有常用的标点S_FOO(串)和C_FOO(焦炭))
赞成魔术字符串/字符:
- 它更短
- 阅读有时很自然(有时)
- 命名常量可能并不熟悉(
C_APOS
VS'\''
)
赞成常数
- 这是很难做的错别字(例如对比
"''" + '"'
与S_APOS+S_APOS + C_QUOT
) - 它消除了转义问题如果正则表达式是
"\\s+"
或"\s+"
或"\\\\s+"
? - 这很容易搜索代码,标点符号
(有这个限制 - 我不会写正则表达式,即使正则表达式语法都是编程中最认知功能障碍的部分之一这种方式,我认为。我们需要更好的语法。)
我很高兴看到我并不孤单地提倡这种程度的冗长 – 2009-11-27 08:17:26
我倾向于在团队中与我合作使用长名称的东西... – 2009-11-27 08:19:02