具有匹配情况的圈复杂度Scala语法错误

时间:2016-04-22 18:33:35

标签: scala

处理圈复杂度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样式检查生成。

1 个答案:

答案 0 :(得分:2)

我认为你的代码不好,除了它可以简化一点:

ssl.wrap_socket

CyclomaticComplexityChecker的理由说:

  

如果代码太复杂,那么这会使代码难以阅读。

您的代码并不复杂且不易阅读,所以我认为silence checker对于这种特殊情况是可以的。

但是!如果您的代码段只是较长方法的一部分,那么检查器是正确的,您需要简化您的方法。通过将此部分提取为单独的方法来实现。