Scala的环状复杂性 [封闭]
有没有一种工具可以生成 scala 代码的循环复杂性?
谢谢
据我所知,没有这样的工具。我认为重要的是要注意,循环复杂性基本上是一个过程度量,当你的语言中有高阶函数时,它完全会下降。如果你用“好的”Scala风格编写代码,那么对于你的整个代码库来说,循环复杂性实际上会达到1。原因是高阶框架倾向于完全避免显式分支。一切都是用函数编码的,并不是特别清楚如何测量高阶函数的循环复杂性(因此,一切都归于1)。
我建议你放弃在Scala或任何其他函数式语言的上下文中测量循环复杂性的想法。一个更好,实际上更翔实的指标是简单地浏览和/语句的代码。当你找到它们时,考虑让它们消失。这些语句无论如何都不好,但在许多情况下,它们可以被直线,高阶函数所取代。这种检查将实现与循环复杂性度量相同的目标,但更有用的是函数范式。而且,在一天结束时,您的代码可能会更加“实用”,并且因此更加可组合。if
match
case
为了扩展Daniel的评论,只要你可以编码高阶函数,实际上就会出现同样的问题。这意味着,特别是,循环复杂性不适用于OO。如果一个方法调用b.foo,那么有一个不可见的分支点 - 一个分支到任何可能以这种方式到达的foo方法。然而,Java或其他任何东西的环形复杂性度量都没有将message发送计为分支点。完全有可能(尽管不常用)通过普通的旧OO删除所有ifs,all fors和times等。OO 和 FP 之间在这些方面的唯一区别是,用更高级别的构造替换循环和条件被认为是正常的 FP 实践。