ruby - 动态调度是否会降低圈复杂度?

标签 ruby complexity-theory refinements

想象一下以下将 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/

相关文章:

ruby - 为什么在 IRB 中使用 Refinement 时得到 "main.using is permitted only at toplevel"?

ruby-on-rails - Ruby 改进和钩子(Hook)

ruby-on-rails - rails 3 : Uniqueness validation for nested fields_for - Part2

ruby - 无法安装 ruby​​ 2.0.0

ruby-on-rails - 包含从插件到 Controller 的方法

algorithm - 这段代码的复杂性是什么,它的嵌套 for 循环重复地使它的计数器加倍?

ruby-on-rails - 我如何断言 Cucumber 中模型的存在?

performance - 排序算法的内存速度权衡

algorithm - O(1) 事件发布给 N 个订阅者

ruby - 分层使用优化