Мы делаем много лексической обработки с произвольными строками, которые включают произвольные знаки препинания. Я разделился относительно того, использовать ли магические символы/строки или символические константы.
Примеры следует читать как независимые от языка, хотя большинство из них написаны на Java.
Есть явные примеры, когда пунктуация играет семантическую роль и должна быть определена как константа:
File.separator
не "/"
или "\\"
; // легко, так как это зависит от ОС
и я пишу XML_PREFIX_SEPARATOR = ":"
;
Однако допустим, мне нужно заменить все примеры ""
пустой строкой ``. Я могу написать:
s = s.replaceAll("\"\"", "");
or
s = s.replaceAll(S_QUOT+S_QUOT, S_EMPTY);
(Я определил все распространенные знаки препинания как S_FOO (строка) и C_FOO (символ))
В пользу магических строк/символов:
- Это короче
- Естественно читать (иногда)
- Именованные константы могут быть не знакомы (
C_APOS
против'\''
)
В пользу констант
- Труднее сделать опечатки (например, противопоставить
"''" + '"'
S_APOS+S_APOS + C_QUOT
) - Это устраняет проблемы с экранированием. Должно ли регулярное выражение быть
"\\s+"
,"\s+"
или"\\\\s+"
? - Легко найти код по знакам препинания
(Этому есть предел — я бы не стал писать регулярные выражения таким образом, даже несмотря на то, что синтаксис регулярных выражений — одна из самых когнитивно дисфункциональных частей всего программирования. Я думаю, нам нужен лучший синтаксис.)