斯卡拉的循环复杂性

Rob*_*t J 27 java scala

是否有用于生成scala代码的圈复杂度的工具?

谢谢

Dan*_*wak 29

据我所知,没有这样的工具.我认为重要的是要注意圈复杂度是一个基本的程序性度量标准,当你的语言中有更高阶的函数时,它就完全失败了.如果你写在"好"的Scala代码风格,圈复杂度从字面上去1为您的整个代码库.原因是高阶框架倾向于完全避免显式分支.一切都是根据函数编码的,并且如何测量高阶函数的圈复杂度并不是特别清楚(因此,一切都变为1).

我建议你放弃在Scala上下文中测量圈复杂度的想法,或者实际上任何其他函数式语言.一个更好的,实际上更具信息性的指标是简单地通过代码ifmatch/ case语句.当你找到它们时,考虑让它们消失.这些陈述无论如何都不错,但在很多情况下它们可以用直线,高阶函数代替.该检查将实现与圈复杂度度量相同的目标,但更有用的是功能范例.并且,在一天结束时,您的代码可能会更加"功能化",并且因此可以更好地组合.

为了扩展Daniel的评论,只要你能编码更高阶的函数,就会出现同样的问题.这意味着,特别是,圈复杂度并不适用于OO.如果一个方法调用b.foo,那么就会有一个不可见的分支点 - 一个可能以这种方式到达的任何foo方法的分支.然而,大多数针对Java的圈复杂度测量或任何不计算消息的测量都作为分支点发送.完全可能(虽然不常见)通过简单的旧OO删除所有ifs,所有fors和whiles等.沿着这些线的OO和FP之间的唯一区别是用更高级别的构造替换循环和条件被认为是正常的FP实践.

  • @Steffen - 我不买.模式匹配和折叠是相同的表达方式.在某些情况下,一个人比另一个人更适合.拧不会告诉你任何事情的任意指标. (2认同)

orb*_*ish 12

Scalastyle:

http://www.scalastyle.org/rules-0.5.0.html

Odersky认为在FP中重要的是圈复杂度,这一个Scala问题.