【问题标题】:Refactoring method reduce cognitive complexity for switch case重构方法降低switch case的认知复杂度
【发布时间】:2020-06-25 23:12:59
【问题描述】:

您好,我很难降低认知复杂性,有什么方法可以降低吗? 任何帮助,将不胜感激。由于 Sonarlint,我无法通过我的代码

谢谢

private void addSth(List<Integer> myStatus, List<String> myId, String taskOwner, StringBuilder queryStatement, List<Object> args) {
        
        if (null != myStatus&& myStatus.size >0) {
             queryStatement.append("and (");
        for(int i = 1; i <= status.size(); i++) {
          int status = myStatus.get(i-1);
    
           switch (status) {
            case 1:
             StringBuilder potSth = new StringBuilder();
             if (null != myId && myId.size() > 0) {
             pothSth.append("(");
    
           for (int j=1; j <= myId.size(); j++) 
               pothSth.append(" ? ");
          if (j < myId.size()) 
              pothSth.append(", ")
                
           
           pothSth.append(")");
             
          
          queryStatement.append("sth");
          queryStatement.append(pothSth);
         queryStatement.append(")\n");

         args.add(1);
        
        for (String pOwner : ownerId) {
          args.add(pOwner);
          
     break;

     case 2:
     case 3:
         queryStatement.append("or ");
       args.add(status);
       args.add(taskOwner);
     

  if (i < myStatus.size ) {
  queryStatement.append("or ");
 
   

【问题讨论】:

  • 您能否edit 您的问题包括您的所有代码,您是否还可以格式化您的代码以便更容易理解。

标签: java spring algorithm spring-boot jackson


【解决方案1】:

Sonarlint 根据三个因素衡量认知复杂性:

  1. 忽略允许将多个语句简写为一个的结构。
  2. 代码线性流中的每个中断都增加(加一)。
  3. 嵌套流动破坏结构时增加。

来源:Cognitive Complexity White Paper 第 4 页

我建议将addSth 方法分解为几个较小的方法,也许是为了处理状态,附加到pothSth 和附加到queryStatement

它最后似乎缺少一些花括号,所以我不完全确定这段代码在做什么。就像 Jonny 说的,一些上下文和格式将不胜感激。 :)

【讨论】:

  • 感谢您的回答。代码中的大括号是对的,但是我不能放在这里,你能不能也写一下如何将我的方法分解成更小的方法
  • 由于没有任何右大括号,我不确定嵌套在什么中,但类似于private void addSth(...args...) { appendAndIfValidStatus(queryStatement) ... appendCharBasedOnStatus(pothSth) ... addPOwner(args, pOwner) ... } (为奇怪的格式道歉,mini-Markdown 对我来说是新的)
猜你喜欢
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 2021-09-22
  • 2021-06-29
相关资源
最近更新 更多