Sonarqube - 扩展嵌套的三元运算符
Posted
技术标签:
【中文标题】Sonarqube - 扩展嵌套的三元运算符【英文标题】:Sonarqube - extend the nested ternary operators 【发布时间】:2021-12-05 17:27:35 【问题描述】:我得到了这个表达式的代码味道:
return url == null ? View("Demo") : View(!string.IsNullOrEmpty(url) ? (object)url: null);
如何扩展此三元运算符以避免不符合标准的编码标准(Sonar cube 将此检测为主要代码异味/不符合标准)?
【问题讨论】:
【参考方案1】:对于每条规则,SonarQube 都提供了合规和不合规解决方案的描述和示例。对于这个特定的规则,says:
仅仅因为你可以做某事,并不意味着你应该做,嵌套三元运算就是这种情况。嵌套三元运算符产生的代码在您编写时可能看起来很清晰,但六个月后会让维护人员(或更糟 - 未来的您)摸不着头脑并诅咒。
相反,为了清楚起见而犯错,并使用另一行将嵌套操作表示为单独的语句。
不合规代码示例
public string GetReadableStatus(Job j) return j.IsRunning ? "Running" : j.HasErrors ? "Failed" : "Succeeded"; // Noncompliant
合规解决方案
public string GetReadableStatus(Job j) if (j.IsRunning) return "Running"; return j.HasErrors ? "Failed" : "Succeeded";
在您的特定示例中,将被制作为:
if (url == null)
return View("Demo");
return View(!string.IsNullOrEmpty(url) ? (object)url: null);
不过,我会考虑在 switch
声明中重新表述所有这些内容;这可能更容易阅读和维护,例如:
switch(url)
case null:
return View("Demo");
case "":
return View(null);
default:
return View(url);
【讨论】:
以上是关于Sonarqube - 扩展嵌套的三元运算符的主要内容,如果未能解决你的问题,请参考以下文章