V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sandman511
V2EX  ›  程序员

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

  •  
  •   sandman511 · 2019-10-28 09:49:53 +08:00 · 3482 次点击
    这是一个创建于 1861 天前的主题,其中的信息可能已经有所发展或是发生改变。

    public static String BRACKET_LEFT_EN = "(";`

    public static String BRACKET_LEFT_CN = "(";`

    public static String SLASH = "/";`

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

    9 条回复    2019-10-28 13:43:38 +08:00
    lihongjie0209
        1
    lihongjie0209  
       2019-10-28 09:52:07 +08:00
    enum?
    gam2046
        2
    gam2046  
       2019-10-28 09:57:43 +08:00
    这种看看就好了。阿里自己的开源项目,用阿里的代码规范去套,都套不进去。
    passerbytiny
        3
    passerbytiny  
       2019-10-28 10:20:02 +08:00
    是。

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

    抽常量是为了便于修改或者用变量名说明含义
    把一个括号抽个常量起名叫”括号“没有任何意义
    amon
        6
    amon  
       2019-10-28 12:07:39 +08:00
    这叫脱裤子放屁。。。
    wysnylc
        7
    wysnylc  
       2019-10-28 12:37:02 +08:00
    阿里规范只是建议而已,他自己都不太遵守的....有些旁枝末节确实不用管
    saltedFish666
        8
    saltedFish666  
       2019-10-28 13:25:37 +08:00
    用的频繁的就加了,一般的就算了,无视,人家只是建议
    siteshen
        9
    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
    }
    }
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2554 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:37 · PVG 12:37 · LAX 20:37 · JFK 23:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.