400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

工作学习总结-创新互联

优化if···else

我们在工作中经常会写出如下代码

成都创新互联公司成立与2013年,是专业互联网技术服务公司,拥有项目做网站、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元巴林左旗做网站,已为上家服务,为巴林左旗各地企业和个人服务,联系电话:18980820575
   if (xxx != null) {   if (xxx != null) {   if (xxx != null) {   
              }
              ....
          }
      }

看起来也没什么问题。但是当if···else层数变多,将会越来越难以阅读,逐步形成‘屎’代码

if (xxx == null) {return;
}
// 原来if()逻辑

if 逻辑中的代码过多,可以考虑封装对应的子方法,来解决层数问题

方法相关

每个方法有每个方法的职责,不要在方法中增加额外的逻辑,例如

public void xxx() {// 业务逻辑
   xxx.setXxx();
   // 业务逻辑
   xxx.setXxx();
   // 业务逻辑
   xxx.setXxx();
  ...
  }

优化后,注意不要让你的代码过于的臃肿

public void xxx() {// 业务逻辑
   // 业务逻辑
   // 业务逻辑
   setXxx(xxx)
}
public void setXxx() {xxx.setXxx();
   xxx.setXxx();
   xxx.setXxx();
}
大最小值
public static void main(String[] args) {int[] nums = {1,2 ,3, 4, 5};
        int min = Integer.MAX_VALUE;
        for (int i = 0; i< nums.length; i++) {if (nums[i]< min) {min = nums[i];
            }
        }
    }

优化后

public static void main(String[] args) {int[] nums = {1,2 ,3, 4, 5};
        int length = nums.length;
        int min = Integer.MAX_VALUE; // 如果是有序数组,这里还可以直接替换int min = nums[length - 1]; 一般不建议使用Integer.MAX_VALUE
        min = nums[length - 1];
        for (int i = 0; i< length; i++) {min = Math.min(min, nums[i]);
        }
    }
Go语言的流式调用解决多层for

我们在业务中经常可能遇到这种代码

func GetResult(param []*dto.ActReq) []Stream {var (
		u []Stream
	)
	for _, p := range param {// 业务逻辑
		for _, a := range param.aaa {	// 业务逻辑
			for _, x := range a.xxx {		// 业务逻辑
				for _, b := range x.bbb {// 业务逻辑
					if b == "res" {var s Stream
						// 业务逻辑
						s.result = a
						u = append(u, s)
					}
				}
			}
		}
	}
	return u
}

优化后

type StreamList struct {StreamList []Stream
}

type Stream struct {result interface{}
   flag   string
}

func Builder(param []*dto.ActReq) *StreamList {var (
      u   []Stream
      res = &StreamList{}
   )
   for _, p := range param {  // 业务逻辑
      for _, a := range param.aaa { // 业务逻辑
         var s Stream
         // 业务逻辑
         s.result = a
         u = append(u, s)
      }
   }
   return res.SetStream(u)
}

func (s *StreamList) SetStream(streamList []Stream) *StreamList {s.StreamList = streamList
   return s
}

func (s *StreamList) GetStream() []Stream {return s.StreamList
}

func (s *StreamList) AFilter(pass func(flag string) bool) *StreamList {streamList := make([]Stream, 0)
   for _, stream := range streamList {  // 业务逻辑
      if pass(stream.flag) { streamList = append(streamList, stream)
      }
   }
   s.StreamList = streamList
   return s
}

func (s *StreamList) BFilter(pass func(flag string) bool) *StreamList {streamList := make([]Stream, 0)
   for _, stream := range streamList {  // 业务逻辑
      if pass(stream.flag) { streamList = append(streamList, stream)
      }
   }
   s.StreamList = streamList
   return s
}

func main() {res := Builder(param).AFilter(func(flag string) bool {  // 处理业务逻辑
      if flag == "xxx" { return true
      }
      return false
   }).BFilter(func(flag string) bool {  // 处理业务逻辑
      if flag == "xxx" { return true
      }
      return false
   }).GetStream()
   fmt.Println(res)
}
业务代码中错误规范设计注意点需求思考与总结
  1. 外部因素的排除(提前问好第三方有什么限制,是否是针对该接口的 还是针对全局的,对于其他的有什么影响)

  2. 思考整体的方案设计,以及方案设计的优点和缺点,是否有其他方案可以

  3. 编写测试用例,然后先测试成功

  4. 思考逻辑点,先看接口是否正常,在深入看每个逻辑访问 成功 失败 是否对业务有影响,有影响如何进行处理

  5. 测试正常的逻辑功能,debug一步一步的测试,不要去跳出,每次都需要仔细看看是否异常

  6. 注意go语言如果是指针类型,那么不管内部什么类型都会替换地址,导致后续引用有可能出现问题,要注意

  7. 自测仔细去思考所有的可能,然后模拟测试

  8. 测试完,自己需要再去验证一遍上线的代码

后续将持续进行更新~~~
欢迎各位也分享与补充

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网站标题:工作学习总结-创新互联
标题链接:http://mzwzsj.com/article/heoip.html

其他资讯

让你的专属顾问为你服务