gpt4 book ai didi

php - 为什么这段代码具有很高的圈复杂度 - 或者它是 Jenkins 中 PHPMD 中的一个错误?

转载 作者:行者123 更新时间:2023-12-03 16:07:47 25 4
gpt4 key购买 nike

我试图了解圈复杂度的工作原理以及如何避免警告。是的,我明白编写代码的目的不是避免任意警告,但我至少想知道发生了什么,以便我可以决定我看到的代码是好还是坏。

我有一个看起来像的函数:

protected function update($uuid, $data, $householdUuid, $androidId) {
$household = $this->householdService->getHouseholdByUuid($householdUuid);

$this->updatePeriod($household, $data);
$this->updateNickname($household, $data, $androidId);
$this->updateDateOrder($household, $data);
$this->updateCurrency($household, $data);
$this->updateAccounts($household, $data);

$household->save();
return $this->respondUpdated();
}

这被标记为具有 10 的圈复杂度。这怎么可能?来自 the documentation ,我会将此算作 1。唯一的可能性是 PHPMD 正在下降到各种方法调用中。

但如果是这样,那么我就没有办法“修复”这个方法了。通常,我会通过提取较小的辅助方法来降低方法的复杂性。该方法已经被重构为各种 update() 方法,以消除发生的一堆条件更新。原始方法的圈复杂度也为 10,并且重构没有做任何事情。

或者问题可能更简单——我通过与 Jenkins 设置的持续集成来运行 PHPMD。 PHPMD 没有使用最新的代码会不会有问题?在我已经将类重构到行数限制以下之后,我遇到了一些类似的问题,它会将类标记为行数过多。

最佳答案

我可能认为每个函数调用都是将 +1 添加到复杂性的原因,因为它在技术上是通过代码的,但根据文档,它不应该这样做。甚至 Cyclomatic Complexity 的定义不支持这个计数。

我认为这是 PHP Mess Detector 中的一个错误,因为 PHP_CodeSniffer 复杂性计算并没有给出 10。

关于php - 为什么这段代码具有很高的圈复杂度 - 或者它是 Jenkins 中 PHPMD 中的一个错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20357188/

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