设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

如何写一个清晰明了的Bug

发布时间:2019-08-01 16:40 所属栏目:21 来源:java架构爱好者
导读:Bug是不可避免。但如何让自己的Bug写得清新脱俗,结构清楚则是需要我们不断努力的。 在开始今天的话题之前,先抛出一个问题,代码结构好是好事吗? 代码结构好事好事吗? 该图是我的票圈里一位兄弟转发的。代码结构好了,别人接手容易,反倒是写得烂了,却可

Bug是不可避免。但如何让自己的Bug写得清新脱俗,结构清楚则是需要我们不断努力的。

如何写一个清晰明了的Bug

在开始今天的话题之前,先抛出一个问题,代码结构好是好事吗?

代码结构好事好事吗?

如何写一个清晰明了的Bug

该图是我的票圈里一位兄弟转发的。代码结构好了,别人接手容易,反倒是写得烂了,却可以成为焦点。你咋一听觉得这是什么神逻辑,虽然听着有道理,但总感觉有点政治不正确。

这个是一个问题,很值得思考的问题。

写程序,就是写逻辑,逻辑最初的样子,就是用if else来表达,事实上这就是我们描述这个世界的基本方式,if else。这两个分支可以覆盖一切情况。你能告诉我们还有if else之外的场景吗?!

如何写一个清晰明了的Bug

可以这么说,if else可以描述这个世界上所有的逻辑。

if else就是整个世界

你手握if else 两个单词,心想,产品你尽管提需求吧,这个世界上还有我if else解决不了的问题吗。而且久而久之,你会发现写代码就是if else,整天就在if else两个代码块里盘旋。

如何写一个清晰明了的Bug

慢慢的,你开始彷徨,开始思考人生,甚至怀疑人生,难道程序这么无聊吗?if else 外加crud就可以解决一切?

编程届两大流派

这个还是要从理论说起,其实描述这个世界有两种方式。一种是函数算法派,一种面向对象派。

如何写一个清晰明了的Bug

而函数算法派其实就是if else派,这一派是一个古老的门派,他们围绕着一个方法体(或者叫函数)就可以一直写下去并且能解决问题。

而面向对象派则主张通过结构和组合的方式来解决问题,而不是围绕着if else来搞事情。

可以毫不夸张的说,我们现如今绝大多数人也包括我本人在内,我们都还处于函数算法派,也就是if else派。至于面向对象这些东西,充其量注入的时候体会一下,或者在new的时候体会一下。其余时候我们都是在安静的写着if else。

然而if else最终让我们走向不归路。

前面我们说过if else可以覆盖整个世界。但覆盖范围广并不等于它明了。

如何写一个清晰明了的Bug

开始的时候,你发现自己的if else异常明了和清晰。

如何写一个清晰明了的Bug

直到后来,一步步,就变成下面这样了:

如何写一个清晰明了的Bug

直到后来,你开始怀疑人生,于是你决定去看一些技术书籍,让自己的心灵重新洗涤一下,这样第二天才能稍微平静的面对昨日遗留的if else。

避免if else泛滥的四法则:一提二抽三组四模式

那么我们如何避免if else的过渡泛滥呢?我总结了一个法则:一提二抽三组四模式。

如何写一个清晰明了的Bug

1、一提

以下的代码我是从真实的项目代码中摘取的。

bad case:

如何写一个清晰明了的Bug

good case:

如何写一个清晰明了的Bug

上面两段代码执行了相同的逻辑,但第一种层次更多,可读性也差,这还是刚开始的代码,随着需求的不断变化,这段代码的层次结构最后就会变成一堆乱麻。这里其实并没有用什么技术,就是简单的对代码逻辑路径进行重新的编排,从而实现了代码的整洁和更好的可读性。

在if else的优化中,一个核心的思路就是:更少的缩进、更少的else。

上面重构后的代码,你可以看到缩进线由三条变成了两条,同时通过把异常场景的逻辑前提的方式去掉了else块。异常场景逻辑一般指负向的条件,比如==null,notExist,XxxException等。理想的代码,总是应该把这些异常情况,提前排除掉,然后才安心的去写主业务逻辑。这样你的代码就会显得层次分明。

如何写一个清晰明了的Bug

理想的代码应该有的样子:

如何写一个清晰明了的Bug

二抽

在有限代码行数内通过第一个法则可以让结构更加的清晰。当if中的代码行数过多时,这会就需要把可以独立成为方法的逻辑抽取成一个private的方法(也可以是public等),代码过长时,我们总是需要这样去做,这样可以让你的主方法就像一篇文章一样具有可读性。

如何写一个清晰明了的Bug

依然是上面的forYes方法。我们把exist的逻辑单独抽取了一个方法,同时又把主逻辑代码也抽了一个方法,你会发现forYes1方法的代码长度并没有增加多少,依然保持的良好的可读性。

三组

上面的第二法则是抽取一个private方法,还没有出类。当我们抽取到一定地步,会发现适合单独成类的时候,应该把之前的这些private方法移动到一个新的类中。这个就是第三法则:组合,通过组合的方式来构建你的逻辑。

如何写一个清晰明了的Bug
如何写一个清晰明了的Bug
如何写一个清晰明了的Bug

四模式

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读