为什么说嵌套代码不要超过三层?多层嵌套的缺点是什么?怎么修改

说老实话我也是第一次碰到这样的观点,我自己个人在写代码的时候,从来没有考虑过那么多。只想着能够把任务完成就行了,功能只要满足我不会考虑代码层面的事情,而且在我看来。java已经足够方便维护了,所以针对嵌套不要超过三层其实是嗤之以鼻的。

我这边也特意找了些自己写的代码,感觉嵌套多层的情况多的是,下面图片中的这个嵌套得有四五层了。但是我还真感觉没有什么。。。可能是因为java代码简单易读的原因,写java代码我从来没有考虑到语法风格什么的。我想尽可能的方便,直接在for语句中嵌套其实更加一目了然吧

然而根据提出这个观点的人它的论述是,多层嵌套的代码有三个缺点。第一是代码可读性差,其次是可维护性差,最后是性能受影响。我们姑且同意他的观点,然后跟着他的思路走一走。看看是否真的如他所说多层嵌套代码真的一无是处,控制代码嵌套的层数就很好

这里有一个嵌套的循环。初次看到没有注释的代码是不是很懵。这个函数是干什么的呢?没有注释,天王老子来了都难读懂。所以真的和是不是多层嵌套有关系吗?我尝试在没有注释的情况下理解这个函数,如果不是自己写的代码,这很困难。

一般来说我们拆分for语句的方法有两种,一种是提取,一种是反转。在下图中我们使用了提取抽离的方式将其中取模判断的语句单独制作成了一个函数。但是我们要不断质疑反驳,有一种观点认为一个函数如果调用了过多的小函数,会导致我们在很多的函数之间跳跃,这恰恰打断了我们的思维。

这个反转挺有意思的,我们来看一下反转之后的代码图片。那这个看起来挺有意思的。大家要对比之前的图片啊。它将这个单纯的只返回一条语句的,或者单纯的false,数字,字符串,给放在了后面。将后续的需要很多操作的放在了后面。这个看起来不错,当我执行到这儿的时候,不符合条件的我在上面直接给它返回。这种方式就是告诉我们先判断失败的,后执行正确的。

那我现在觉得这个代码风格不错,比如这是等待整理的一个方法。如果按照if反转的逻辑,我们要将else的、否定的逻辑放在前面,直接返回。将正确的逻辑放在后面

那这就是我们反转完毕的一个方法,相比之前那种一个大if直接嵌套的方式,确实要好看不少,而且还挺一目了然的。我承认自己被说服了,以后自己也要使用这种方式来编写代码,具体就是否定条件前置。正确条件直接书写放在最后,可以快速的将目光聚焦于核心代码上

而之前的这种方式,看上去是一坨,你需要理清它们之间的逻辑,才能找到真正发挥作用的核心代码。所以我感觉这种if否定逻辑前置的代码风格值得提倡。至于前面那种一个小语句弄一个函数的行为,仁者见仁智者见智。

如果你需要超过三层的嵌套,你就完蛋了。这是linux内核作者林纳斯的原话。综合了解下来,我个人比较喜欢if否定逻辑前置的方式,这种看起来确实很好,写起来也很好理解。但是将一个逻辑拆成太多的小块方法我是不认同的,因为这本质是简单的东西复杂化了。如无必要不增实体。如果这些内容对你有帮助,记得点赞评论过收藏关注。

展开阅读全文

页面更新:2024-05-25

标签:嵌套   多层   代码   注释   语句   函数   逻辑   缺点   观点   方式   方法

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top