关于魔法值 这样的行为是否多此一举

2019-10-28 09:49:53 +08:00
 sandman511

public static String BRACKET_LEFT_EN = "(";`

public static String BRACKET_LEFT_CN = "(";`

public static String SLASH = "/";`

开了阿里的而代码规范检测,一旦出现魔法值就会有下划线,求助大家给强迫症提供一个解决方案

3405 次点击
所在节点    程序员
9 条回复
lihongjie0209
2019-10-28 09:52:07 +08:00
enum?
gam2046
2019-10-28 09:57:43 +08:00
这种看看就好了。阿里自己的开源项目,用阿里的代码规范去套,都套不进去。
passerbytiny
2019-10-28 10:20:02 +08:00
是。

你上边列的这些,加上绝大部分"string",以及表示 0、1 (而不是假真)的 0、1,这些都是所见即所得的 literal,并不是魔法值。但谁让中国人特别喜欢干矫枉过正的事呢。
xuanbg
2019-10-28 11:43:20 +08:00
关掉魔法值的检查就好了
chendy
2019-10-28 11:53:55 +08:00

抽常量是为了便于修改或者用变量名说明含义
把一个括号抽个常量起名叫”括号“没有任何意义
amon
2019-10-28 12:07:39 +08:00
这叫脱裤子放屁。。。
wysnylc
2019-10-28 12:37:02 +08:00
阿里规范只是建议而已,他自己都不太遵守的....有些旁枝末节确实不用管
saltedFish666
2019-10-28 13:25:37 +08:00
用的频繁的就加了,一般的就算了,无视,人家只是建议
siteshen
2019-10-28 13:43:38 +08:00
用常量能方便搜索,更容易理清逻辑。但如果只有一个地方使用且语义足够清晰,就没必要用了。
ps:你定义的常量缺少了 final。记得阿里规范是有常量说嘛的,也许加上 final 就和阿里的规范不冲突了?

// ok,已封装成函数,只有这一处使用 literal string。
bool isLeftBracket(String s) {
return s == "(" || s == "(";
}

// 只有此处使用,冗余的常量
bool isLeftBracket(String s) {
final String BRACKET_LEFT_EN = "(";
final String BRACKET_LEFT_CN = "(";
return s == BRACKET_LEFT_EN || s = BRACKET_LEFT_CN;
}

// ok,多处引用,用常量方便搜索
class Parser {
public static final String BRACKET_LEFT_EN = "(";
parseList(String s) {
if (s.startsWith(BRACKET_LEFT_EN && someCondition) {
// more code
}
}

parseArray(String s) {
if (s.startsWith(BRACKET_LEFT_EN && otherCondition) {
// more code
}
}
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/613544

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX