细节决定品质:不良的if/else使用习惯

代码重构无处不在,重点滴做起。经常见到一些下面这样的代码:

1、不要拿bool和false直接比

if (false == IsXXX())

{

}

这是画蛇添足,费力不会讨好,直接了当即可:if (!IsXXX())

2、太多的if/else嵌套,导致过多缩进,造成眼花缭乱,阅读困难

if ()

{

    if ()

    {

        if ()

        {

            if ()

            {

                if ()

                {

                }

                else

                {

                }

            }

        }

    }

}

这个时候应当考虑提取成函数调用,以减少直接的if/else嵌套层次。同理,while/for也应当避免这种情况。

3、if代码块过长,else代码块仅两三行,典型的头得脚本,造成阅读困难

if (A == B)

{

    // 超过一屏的代码行

    // 代码行1

    // 代码行2

    // 代码行3

    // 代码行4

    // 代码行5

    // 代码行6

    // 代码行7

    // 代码行8

    // 代码行9

    // 代码行10

    // 代码行11

    // 代码行12

    // 代码行13

    // 代码行14

    // 代码行15

    // 代码行16

    // 代码行17

    // 代码行18

    // 代码行19

    // 代码行20

    // 代码行21

    // 代码行22

    // 代码行23

    // 代码行24

    // 代码行25

    // 代码行26

    // 代码行27

    // 代码行28

    // 代码行29

    // 代码行30

    // 代码行31

    // 代码行32

    // 代码行33

    // 代码行34

    // 代码行35

    // 代码行36

    // 代码行37

    // 代码行38

    // 代码行39

}

else

{

    // 两三行代码

    // 代码行1

    // 代码行2

    // 代码行3

}

由于if代码块超过了一屏,会大大增加阅读代码的困难,特别是要找到if对应的else时,不得不非常小心。建议遇到这类代码时,将if和else代码块对调,会值得阅读代码容易许多,如下所示:

if (A != B)

{

    // 两三行代码

    // 代码行1

    // 代码行2

    // 代码行3

}

else

{

    // 超过一屏的代码行

    // 代码行1

    // 代码行2

    // 代码行3

    // 代码行4

    // 代码行5

    // 代码行6

    // 代码行7

    // 代码行8

    // 代码行9

    // 代码行10

    // 代码行11

    // 代码行12

    // 代码行13

    // 代码行14

    // 代码行15

    // 代码行16

    // 代码行17

    // 代码行18

    // 代码行19

    // 代码行20

    // 代码行21

    // 代码行22

    // 代码行23

    // 代码行24

    // 代码行25

    // 代码行26

    // 代码行27

    // 代码行28

    // 代码行29

    // 代码行30

    // 代码行31

    // 代码行32

    // 代码行33

    // 代码行34

    // 代码行35

    // 代码行36

    // 代码行37

    // 代码行38

    // 代码行39

}

当然更佳的习惯,是不要有过长的代码块,应当考虑封装成函数。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Vamei实验室

Linux并发与同步

典型的UNIX系统都支持一个进程创建多个线程(thread)。在Linux进程基础中提到,Linux以进程为单位组织操作,Linux中的线程也都基于进程。尽管实...

29890
来自专栏架构说

c++在编译中遇到符合不存在如何解决?

今日问题:symbol 不存在 : symbol lookup error: ./libinterface.so: undefined symbol: _ZN...

361150
来自专栏栗霖积跬步之旅

java多线程编程核心技术——第一章总结 1.5sleep()方法

1.1进程、多线程的概念及线程的优点 进程的概念: 百度百科讲解: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和...

221100
来自专栏腾讯IVWEB团队的专栏

nodejs 中错误捕获的一些最佳实践

本文为翻译文章,原文比较长,感觉也有点啰嗦,所以根据个人理解猜测梳理出本文。

68300
来自专栏我有一个梦想

C++服务器开发之笔记三

为什么需要原子性操作? 我们考虑一个例子: (1)x++这个常见的运算符在内存中是怎样操作的? 从内存中读x的值到寄存器中,对寄存器加1,再把新值写回x所处的内...

21470
来自专栏逆向技术

16位汇编第第四讲常用的7种寻址方式

常用的7中寻址方式 昨天稍微讲了一下,立即数寻址,今天继续讲解寻址方式. (注意,这个属于简陋版的,写了4个小时的博客,也就是第一版,保存了一下,但是博客出问题...

21550
来自专栏圆方圆学院精选

【刘文彬】 Debug EOS:nodeos + mongo_db_plugin

原文链接:醒者呆的博客园,https://www.cnblogs.com/Evsward/p/storage.html

16220
来自专栏Python爬虫与算法进阶

Python中的小魔法(二)

01 函数 局部变量 x = 66 def func(x): print('x等于', x) x = 6 print('局部变量x改变...

29640
来自专栏ml

C/C++ 关于生成静态库(lib)/动态库(dll)文件如何使用(基于windows基础篇)

1. 首先,如何制作一个静态库(lib)?            额, 对于静态库,我们知道,里头是不应该有Main函数,它只是一个配合文件。之所以称之为lib...

1.2K50
来自专栏栗霖积跬步之旅

java并发编程的艺术——第四章总结

第四章并发编程基础   java语言是内置对多线程支持的。   为什么使用多线程:     首先线程是操作系统最小的调度单元,多核心、多个线程可以同时执行,能够...

28570

扫码关注云+社区

领取腾讯云代金券