导言

本文正在参加「金石计划」

大家好,我是有清

《史记》有云:大乐必易,大礼必简,写给机器看的代码简略,可是写给人看的代码就需求一点心思

在咱们平常的开发过程中,如果遇到代码嵌套过深的的函数,那么咱们会

像写诗一样写代码:扁平化管理你的代码

什么叫嵌套过深呢

咱们能够简略看一段发薪酬的例子

像写诗一样写代码:扁平化管理你的代码

咱们将函数内部一个左花括号视为一个嵌套深度,那么咱们这个函数具有足足 5 层深度,正常状况下超越 3 层深度,这段代码便会散发出臭的味道

扁平化

那怎么减少咱们这个嵌套深度呢?扁平化办理咱们代码呢

通常状况下,咱们具有两种手法,第一种是提炼,将一段代码提炼到一个独立的函数;第二种是回转,赶快将成果回来给函数。

接下来,咱们开始使用这两种手法,去重构一下咱们的代码。

提炼

咱们什么时分能够提炼函数呢?

便是当咱们 需求花一段时间去了解这一段代码是用来干什么的时分咱们就能够将这一段代码去提炼为函数

举个简略一点的

有时分咱们需求检查response 是否正确,正确的话,咱们才会进行一系列对应的逻辑处理

if(Objects.nonNull(respponse) && Objects.equals(respponse.code, "200") && Objects.nonNull(response.getModel())) {
	// do something
}

通常状况下,咱们要去阅览首要逻辑之前,咱们需求去看一下if这到底是什么状况才会走入咱们的逻辑,但其实这边都是一些常规的校验,咱们大多数的时分底子不关心这个校验的详细逻辑,由于它是用来防备咱们的代码出现异常的取值报错

那么,我以为这种的 if 就能够提炼出来一个函数


if(this.isSucess(respponse)) {  
    // do something  
}  
private Boolean isSucess(Response resp) {  
    return Objects.nonNull(respponse) && Objects.equals(respponse.code, "200") && Objects.nonNull(response.getModel())  
}

读者只需求关心,这个 response 是 sucess 即可,不需求详细关心我是怎么 check 这个 response,由于它相对主逻辑来说不是那么的重要

当然还有一种状况,在代码逻辑中区分红花和绿叶,这也是阿里开发手册中引荐的咱们的一点,单个办法的总行数不要超越 80 行,代码逻辑辨明红花和绿叶,特性和共性,绿叶逻辑单独出来成为额外办法,使骨干代码更加明晰;共性逻辑抽取成为共性办法,便于复用和维护

好,接下来咱们优化一下导言中的代码

像写诗一样写代码:扁平化管理你的代码

优化之后,骨干逻辑就明晰了,咱们想要知道每个状况下的薪酬是怎么发放的,只需关键进去详细的函数检查即可

可是这么多的 if 嵌套,看的还是很不舒畅,咱们继续下一个动作

回转

通常状况下,咱们的if、else 便是用来区分在不同的状况下,代码是走向阳光道还是独木桥,阳光道便是能够了解为都是咱们重要的逻辑,读者都需求看

独木桥你能够了解为异常状况,需求立刻从函数中回来回去,咱们通常称这样的句子为卫句子,基于咱们防御性编程的思维下,赶快的检查回来该函数成果

相同阿里标准也给咱们提到了这一点

像写诗一样写代码:扁平化管理你的代码

那么咱们根据这个思维再进一步优化一下咱们导言的代码

像写诗一样写代码:扁平化管理你的代码

最后再比照一下重构前后的代码

像写诗一样写代码:扁平化管理你的代码

总结

在本文中咱们触摸到了,能够凭借提炼以及回转去优化咱们的代码嵌套,其实你能够看看当前你的项目中的代码是否存在这样的状况,能够考虑是否优化一波,当然优化的时分切记回归测试的重要性

借用熊节的一句话:据说古时高僧有云 “时时勤拂拭,勿使惹尘埃”,代码当如是,专业人士的技艺应当如是

期望大家都能像写诗相同的写代码

写在最后

在朋友的安利下,上星期去了西溪湿地寻梅

顺着路标的最佳赏梅点,咱们一路往前走,但其实花还是没有那么的密布,咱们可疑问,是梅花还没开,还是现已谢了

直到,咱们看见有个游人,在拍照的时分不断的摇那个梅花树,我才悟了,本来不密布的梅花,不是树的不挽留,而是爱美的人的追求

像写诗一样写代码:扁平化管理你的代码