2

想象一下以下将布尔值转换为 int 的方法:

def bool_to_int(bool)
  bool ? 1 : 0
end

bool_to_int(false) # => 0
bool_to_int(true) # => 1

由于有条件,圈复杂度得分为 2。通过使用 Ruby 中的改进,分数会降到 1 吗?:

module Extension
  refine FalseClass do
    def to_int; 0; end
  end

  refine TrueClass do
    def to_int; 1 end
  end
end

using Extension

false.to_int # => 0
true.to_int # => 1

换句话说; 动态调度会降低圈复杂度分数,还是我们只是通过让 Ruby 做“繁重的工作”来隐藏复杂性?

4

1 回答 1

1

圈复杂度基于其中可用的节点和边。通过实现动态调度,您只是以不同的方式实现条件。

因此,圈复杂度保持不变。

根据以下评论进行编辑

是的,圈概念与条件语句紧密相关。减少 if/else 语句会降低圈复杂度。但路径是不变的。但现在他们更加孤立,不再基于条件。

所以我觉得,答案应该是,是的,如果你成功删除了条件语句,复杂性就会降低。但路径是常数。

于 2021-08-17T06:53:39.607 回答