降低代码的圈复杂度——复杂代码的解决之道 (4)

ForEach 没有返回值

在这里你不用去关心Query对象到底是什么,就跟Java8中的map、filter等等控制函数都会返回Stream一样,通过返回Query,来达到代码中流式编程的目的。

4.6.1 简单场景

select简单场景

select简单场景

其中SelectT就是遍历了一个集合,然后做了一些运算,将运算之后的结果输出到了新的slice中。

SelectMany为集合中的每一个元素都返回一个Query,跟Java 8中的flatMap类似,flatMap则是为每个元素创建一个Stream。简单来说就是把一个二维数组给它拍平成一维数组。

4.6.2 复杂场景

selectManyByT-复杂场景

4.7 Group

image-20201229122918527

Group根据指定的元素对结合进行分组,Group`的源码如下。

group源码

Key就是我们分组的时候用key,Group就是分组之后得到的对应key的元素列表。

好了,由于篇幅的原因,关于go-linq的使用就先介绍到这里,感兴趣的可以去go-linq官网查看全部的用法。

5. 关于go-linq的使用

首先我认为使用go-linq不仅仅是为了“逃脱”检测工具对圈复杂度的检查,而是真正的通过重构自己的代码,让其变的可读性更佳。

举个例子,在某些复杂场景下,使用go-linq反而会让你的代码更加的难以理解。代码是需要给你和后续维护的同学看的,不要盲目的去追求低圈复杂度的代码,而疯狂的使用go-linq。

我个人其实只倾向于使用go-linq对集合的一些操作,其他的复杂情况,好的代码,加上适当的注释,才是不给其他人(包括你自己)挖坑的行为。而且并不是说所有的if else都是烂代码,如果必要的if else能够大大增加代码的可读性,何乐而不为?(这里当然说的不是那种满屏各种if else前套的代码)

好了以上就是本篇博客的全部内容了,如果你觉得这篇文章对你有帮助,还麻烦点个赞关个注分个享留个言

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wssxyw.html