概述
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),该方法为静态方法,无返回值,根据情况抛出不同异常,或者添加判断条件,接收返回值。
最后
以上就是直率草丛为你收集整理的Sonar部分问题解决归纳的全部内容,希望文章能够帮你解决Sonar部分问题解决归纳所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复