当我有以下具有 2 级三元运算的代码时
double amount = isValid ? (isTypeA ? vo.getTypeA() : vo.getTypeB()) : 0;
哪个 Sonar 发出警告
Ternary operators should not be nested (squid:S3358)
仅仅因为你可以做某事,并不意味着你应该做,嵌套三元操作就是这种情况。嵌套三元运算符产生的代码在您编写时可能看起来很清晰,但六个月后会让维护者(或更糟 - 未来的您)摸不着头脑并诅咒。
相反,为了清楚起见而犯错,并使用另一行将嵌套操作表示为单独的语句。
我的同事建议可以接受这样的水平,它比替代方案更清楚。
我想知道是否可以将此规则(或其他规则)配置为允许的级别限制?
如果不是,为什么声纳在处理代码约定时如此严格?
我不想忽略规则,只是为了自定义以允许最多 2 个级别而不是 1 个级别。