gpt4 book ai didi

pmd - PMD规则背后的 "Why"

转载 作者:IT老高 更新时间:2023-10-28 21:15:49 28 4
gpt4 key购买 nike

是否有很好的资源来描述 PMD 规则集背后的“原因”? PMD's site有“什么”——每条规则的作用——但它没有描述为什么 PMD 有这条规则,以及为什么忽略这条规则会给你在现实世界中带来麻烦。特别是,我很想知道为什么 PMD 有 AvoidInstantiatingObjectsInLoops 和 OnlyOneReturn 规则(如果您需要创建一个与集合中的每个对象对应的新对象,第一个似乎是必要的,第二个似乎在许多情况下是必要的根据某些标准返回一个值),但我真正想要的是一个链接,它描述了大多数 PMD 规则背后的“原因”,因为这种情况经常出现。

为了清楚起见,我知道我可以禁用这些以及如何做到这一点,我只是想知道为什么它们首先存在。抱歉,如果我错过了一些明显的东西,但在发布之前我做了谷歌搜索和 SO 搜索。我也明白这些问题通常是“品味”问题——我正在寻找的是规则的论据是什么以及有什么替代方案。举个具体的例子,你应该如何实现一个对象对应一个循环中的每个对象(这是Java中的常见操作)而不实例化循环中的每个对象?

最佳答案

在每种情况下,规则可以是特定情况的问题,也可以只是“品味”。

如果存在大量迭代并且实例化代价高昂,则应避免在循环中实例化对象。如果您可以将代码移出循环,您将避免许多对象实例化,从而提高性能。话虽如此,这并不总是可能的,在某些情况下,它对代码的整体性能并不重要。在这些情况下,以更清楚者为准。

对于 OnlyOneReturn,有多种方式来看待这一点(每种方式背后都有强烈的支持者),但它们基本上都归结为品味。

对于您的示例,OnlyOneReturn 支持者需要如下代码:

public int performAction(String input) {
int result;
if (input.equals("bob")) {
result = 1;
} else {
result = 2;
}
return result;
}

而不是:

public int performAction(String input) {
if (input.equals("bob")) {
return 1;
} else {
return 2;
}
}

如您所见,ReturnOnlyOnce 的额外清晰度值得商榷。

另请参阅与 instantiation within loops 相关的 SO 问题.

关于pmd - PMD规则背后的 "Why",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2509856/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com