我們用包含任意標點符號的任意字符串進行大量的詞法處理。我分爲是否使用魔法字符/字符串或符號常量。使用魔術字符串或常量處理標點符號?
應該將這些示例閱讀爲與語言無關,但大部分都是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