处理圈复杂度Scala语法错误,我对最后一个错误的想法不足。
这是一个解析数据文件的情况。以下是代码段:
val lineString = line.mkString(",")
line match {
case Seq("Data1Name", data1ID, "desc1", "..") if data1ID.matches("\\d+") => {
processData1(...)
}
case Seq("Data2Name", data2ID, "desc2", "..") if data2ID.matches("\\d+") => {
processData2(...)
}
case Seq("Data3Name", data3ID, "desc3", "...") if data3ID.matches("\\d+") => {
processData3(...)
}
case Seq("Data4Name", data4ID, "desc4", "...") if data4ID.matches("\\d+") => {
processData4(...)
}
case Seq("Data5Name", data5ID, "desc5", "...", data5xID, '...', ...) if data5ID.matches("\\d+") && data5xID.matches("\\d+") => { // <-- It would be fine if this block is commented out
processData5(...)
}
case _ => Some(Error(s"..."))
}
圈复杂度为13.如果我注释掉上面指出的块,语法检查会很高兴。我无法看到如何进一步简化代码。
顺便说一句,如果我用块5上的方法替换if语句中的两个导管,复杂性会减少1.对我而言,这种方法会增加复杂性。有什么建议吗?
另外,语法错误
Cyclomatic complexity of 13 exceeds max of 10
由我们的构建过程中安装的Scala样式检查生成。
答案 0 :(得分:2)
我认为你的代码不好,除了它可以简化一点:
ssl.wrap_socket
CyclomaticComplexityChecker的理由说:
如果代码太复杂,那么这会使代码难以阅读。
您的代码并不复杂且不易阅读,所以我认为silence checker对于这种特殊情况是可以的。
但是!如果您的代码段只是较长方法的一部分,那么检查器是正确的,您需要简化您的方法。通过将此部分提取为单独的方法来实现。