代码质量检测工具-笔记(二)-代码质量问题

目的

主要记录一下遇到的代码质量问题(主要通过Sonar Plugin)

更多看这里

简介

笔记(二)记录代码质量检测工具检测到的问题

质量问题汇总(持续更新)

“Random” objects should be reused

不合规写法

private String getOuterTitleImageURL() {
    Random random = new Random();
    int num = random.nextInt(outerImageCount);
    return outerUrl + num + "." + outerImageType;
}

意思:random 这个实例应该被重用,而不是每次方法调用的时候再去 new 创建实例

理由:可以减少内存开销,其次是有的 JDK 实现的随机数的算法是基于 seed,如果每次重新 new 一个实例相当于更新了 seed,破坏了随机性

解决方法
可以用 SecureRandom.getInstanceStrong()创建类成员变量

合规写法

public class ArticleMapper {
    private final Random RANDOM = SecureRandom.getInstanceStrong();

    private String getOuterTitleImageURL() {
        int num = RANDOM.nextInt(outerImageCount);
        return outerUrl + num + "." + outerImageType;
    }
}

“await” should not be used redundantly

不合规写法

const getArticleList_ = async (): Promise<Article> => {
  return await getArticleList(request);
};

意思:async 的方法的返回值不用再用 await 获取

理由:async 修饰的方法返回值已经是 Promise 类型了,再用 awiat 相当于获取到 getArticleList(request)方法的返回值 article 然后再将这个返回值 article 包装成 Promise 类型; 这样显得多余,因为如果直接 return getArticleList(request), 最终得到的也是 Promise 类型

解决方法
删除多余的"await"

合规写法

const getArticleList_ = async (): Promise<Article> => {
  return getArticleList(request);
};

Array-mutating methods should not be used misleadingly

不合规写法

Object.assign(
  articleList,
  response.articleList.sort(articleSortComparator).map(toViewArticle)
);

意思:javascript 中 Array 的一些方法是会改变原数组的

var b = a.reverse(); // 不合规
var d = c.sort(); // 不合规

理由:造成源数据可变,提高了造成排查问题的难度

解决方法
通常做法是浅拷贝一份原始对象;javascript 中通常用展开运算符
"…"进行浅拷贝

var b = [...a].reverse(); // 浅拷贝一份a
b.sort(); // 更改拷贝的b数组不影响原本的a

合规写法

Object.assign(
  articleList,
  [...response.articleList].sort(articleSortComparator).map(toViewArticle)
);

更多看这里

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值