Sonar部分问题解决归纳

1.Refactor this method to not always return the same value.

方法的返回值应根据不同情况而发生改变,不能返回固定值。实际判断是应结合返回值赋值情况等决定是否更改。

2.String literals should not be duplicated

重复的字符串文字使重构过程容易出错,因为必须确保更新所有出现的内容。另一方面,常数可以从许多地方引用,但只需要在一个地方更新。在类的最前方定义合适的常量来代替大量的字符串重新出现。

3. Methods should not be empty

方法不应为空,本问题需要根据实际情况判断是漏写或故意为空。若为漏写,需要补齐方法内容,若故意为空,抛出UnsupportedOperationException。

4.Cognitive Complexity of methods should not be too high

方法复杂度过高,这个比较麻烦,软件有标明你可以把复杂度降低至多少(有时或许可以比标明更低?)。需要对具体问题进行分析以判断如何降低圈复杂度。简单来讲,嵌套条件会增加语句的复杂度,可以从避免条件的嵌套入手来考虑如何降低。如以下两段代码,通过更改val.toString的判定条件来避免判断条件的嵌套。

function isEmpty(val) {
    if (val == null) return true // +1 
    if ('boolean' == typeof val) return false // +1
    if ('number' == typeof val) return val === 0 // +1
    if ('string' == typeof val) return val.length === 0 // +1
    if ('function' == typeof val) return val.length === 0 // +1
    if (Array.isArray(val)) return val.length === 0 // +1
    if (val instanceof Error) return val.message === '' // +1
    if (val.toString == toString) { // +1
        switch (val.toString()) { // +2
            case '[object File]':
            case '[object Map]':
            case '[object Set]': {
                return val.size === 0
            }
            case '[object Object]': {
                for (var key in val) { // +3
                    if (has.call(val, key)) return false // +4
                }

                return true
            }
        }
    }
    return false
}
function isEmpty(val) {
    if (val == null) return true // +1 
    if ('boolean' == typeof val) return false // +1
    if ('number' == typeof val) return val === 0 // +1
    if ('string' == typeof val) return val.length === 0 // +1
    if ('function' == typeof val) return val.length === 0 // +1
    if (Array.isArray(val)) return val.length === 0 // +1
    if (val instanceof Error) return val.message === '' // +1
    if (val.toString != toString) { // +1
        return false;
    }
    
    switch (val.toString()) { // +1
        case '[object File]':
        case '[object Map]':
        case '[object Set]': {
            return val.size === 0
        }
        case '[object Object]': {
            for (var key in val) { // +2
                if (has.call(val, key)) return false // +3
            }
            return true
        }
    }
}  

以上两段代码源于stackoverflow的一篇博文,具体如下:

javascript - 如何重构此函数以将其认知复杂性从17降低到允许的15 - 堆栈溢出 (stackoverflow.com)https://stackoverflow.com/questions/62872718/how-to-refactor-this-function-to-reduce-its-cognitive-complexity-from-17-to-the

对于复杂度以及如何降低,想要进一步了解可以参考以下链接:

(43条消息) 圈复杂度_千里之行,始于足下。-CSDN博客_圈复杂度https://blog.csdn.net/lg707415323/article/details/7790660(43条消息) 白盒测试之圈复杂度,以及可以直接降低圈复杂度的10种重构技术_软件猿扫地僧-CSDN博客_如何降低圈复杂度https://blog.csdn.net/kaka1121/article/details/526266905.Unused "private" fields should be removed

如果在程序中声明了一个私有字段,但未使用该字段,则可以将其视为死代码,因此应将其删除。这将提高可维护性,因为开发人员不会怀疑该变量的用途。本问题不一定需要修改,根据使用情况而定。

6.Nested blocks of code should not be left empty

代码块不应该为空。根据情况选择填充或删除代码块。

7.Standard outputs should not be used directly to log anything

记录消息时,必须满足以下几个重要要求:用户必须能够轻松检索日志,所有记录消息的格式必须统一,以允许用户轻松阅读日志,必须实际记录记录的数据,必须安全地记录敏感数据.为此,使用logger.log代替系统输出

8.Source files should not have any duplicated blocks

不能使用完全相同的代码块。应根据情况检查代码块是否正常,代码块的功能具体是否相同以决定删除或作其它更改。

相关链接:

java - Sonar 'Source files should not have any duplicated blocks' rule doesn't distinguish different literals - Stack Overflowhttps://stackoverflow.com/questions/63293635/sonar-source-files-should-not-have-any-duplicated-blocks-rule-doesnt-distingu9.Generic exceptions should never be thrown

针对不同类型的错误定义不同类型的异常。

10.Private fields only used as local variables in methods should become local variables

如果私有字段的值在被读取之前总是在类的方法中赋值,那么它就不会被用来存储类信息。因此,在相关方法中应将其变成局部变量,以防止任何误解。类似于5,需要考虑是否通过其它方式在赋值前已经读取数值。

11.Return values should not be ignored when they contain the operation status code("java.nio.Files#delete" should be preferred)

 如图,可以选择使用files.delete(path),该方法为静态方法,无返回值,根据情况抛出不同异常,或者添加判断条件,接收返回值。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值