【问题标题】:Is Confusing ternary Rule in Sonar Qube really needed?Sonarqube 中的混淆三元规则真的需要吗?
【发布时间】:2020-08-12 19:37:32
【问题描述】:

我写我的java代码

if(x !=null){
    // Do something
}
else {
    // Do something
}

然后声纳 Qube 给出违规。混淆三元真的需要这个规则吗?

【问题讨论】:

  • 这段代码看起来不像三元,为什么规则甚至适用于它?
  • 请参考链接
  • 您能否让您的问题更清楚一些,因为您在这里谈论的是分析 java 代码,但随后引用了适用于 Groovy 的 codenarc 规则!请指定触发您提到的问题的规则键。如果您正在分析 java 或 groovy 代码,请明确说明

标签: java sonarqube


【解决方案1】:

根据您提供的reference link,规则规定:

在三元表达式中避免测试中的否定。例如,改写:“(x!= y)?差异:相同”为:“(x == y)?相同:差异”。一致使用此规则使代码更易于阅读。此外,这还解决了一些琐碎的排序问题,例如“错误情况先出现吗?”或“常见情况先行吗?”。

将规则命名为“混淆三元规则”可能有点令人困惑,因为您拥有的是常规 if-else 构造,而不是三元表达式。但是,由于?: 可以被认为是 if-else 语句的简写,因此您也可以在此处应用该规则。

这有意义吗?就个人而言,我认为绝对。但如果它不适用于您(或您公司)的编码风格,因此您会遇到很多违规行为,我宁愿删除或调整该规则。正如参考资料所说:一致性很重要。

【讨论】:

    【解决方案2】:

    这是必需的,因为它是不必要的,会导致第一眼混淆。

    例如

    if(reporters username is not oliver)
       say it's stackoverflow's concern
    else 
       say it's oliver's concern
    

    【讨论】:

      猜你喜欢
      • 2012-07-17
      • 2017-12-13
      • 2021-05-31
      • 2016-07-04
      • 2019-09-20
      • 2018-04-30
      • 2010-11-24
      • 2021-12-30
      • 1970-01-01
      相关资源
      最近更新 更多