想象一下以下将 bool 值转换为 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 承担“繁重工作”来隐藏复杂性?
最佳答案
圈复杂度基于其中可用的节点和边。通过实现动态调度,您只是以不同的方式实现条件。
因此,圈复杂度保持不变。
根据以下评论进行编辑。
是的,圈概念与条件语句紧密结合。减少 if/else 语句会降低圈复杂度。但路径是不变的。但现在他们更加孤立,不基于条件。
所以我觉得答案应该是,是的,如果你成功地删除了条件语句,复杂性就会降低。但路径是不变的。
关于ruby - 动态调度是否会降低圈复杂度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68758288/