作者 | Java圣斗士 | 原创图文,呕心沥血,欢迎转载!
前天晚上,在浏览头条的时候,意外浏览到一条关于代码注释的恶搞漫画:
看了这张图,忍不住想要发笑。
在评论区我也发表了个人见解,没想到网友纷纷点赞、评论:
网友们的精彩评论:
那么今天,我就来深入分析一下为什么代码注释这么重要!
一、没有注释的代码让人抓狂
在工作中,不免会遇到这样的场景:同事离职,自己不得不接手对方的代码,然而代码里一句注释没有,真的想爆一句粗口:“这TM...一句注释都没有,沙雕看得懂啊!?”。
于是改了旧bug出了新bug,想死的心都有了。
之前在CSDN写过一篇文章,是关于新入职员工如何快速理清代码和业务逻辑的:
我会写这样的文章也是因为自己工作的变动,导致了不得不去梳理别人的业务代码,说句实话,没有注释的代码,看起来真的好难!
于是我开始思考,为什么别人已经实现了的代码,自己梳理起来这么费劲?
我把问题的原因指向了没有注释。先别急着反驳,来看看我的论据!
没有注释的代码是一件很令人抓狂的事情,为什么?
仔细思考一下,在不熟悉业务逻辑的情况下,通常都是先浏览业务流程图,然后再去对比代码。这是因为人类的理解习惯是从因到果,这也是事物发展的规律:出现问题、分析问题、解决问题。
这是一个非常顺其自然的过程,编码工作也是由此一步一步完成的。我们每思考一步代码,都会先问自己“我要干什么”,这实际上就是在“发现问题”,最后落实到代码就是“解决问题”。
然而,在阅读别人代码的时候,就变成了:解决问题、逆向分析、发现问题。
其活动本身就是一个反人类思维的过程,是一个客观无法改变的事实。可是有一个问题在于,写代码的时候为了考虑多种情况,经常会把多个问题杂糅到一种解决方案中,这在编程界也称为“兼容”,于是问题来了:
由于对代码的不熟悉,很难察觉某些非常微妙的部分(因为很难一行不漏地去看别人的代码),导致无法逆向追溯到所有业务问题。这也是很多人改了旧bug,出现新bug,“按下葫芦起来瓢”的真正原因。
那么,既然通过代码逆向追溯问题是一件高风险、高出错率的活动,聪明的语言设计者们有什么解决方案吗?
当然有,就是代码注释!
二、重温注释的用途
语言设计者们为什么要在设计编程语言的时候加入这些对程序运行毫无用处的东西?就是因为他们发现很难看懂别人的代码,很难理解他人的思考方式,又或者自己写的代码,过了很长时间也很难回忆起自己当初的用意。
这就是注释需要解决的问题!
当然,冗余的注释会显得非常的不专业,不过在必要的地方,清楚的阐述问题的实现思路还是比较重要的!例如这样:
一个优秀的编程工作者一定很清楚代码注释可以很好的帮助程序的维护者减少问题的发生,同时,代码注释也可以达到隔空交流的作用——我们互不相识,却因为注释紧密的联系在了一起。
不得不说,能把注释玩的这么6的程序员也是没sei了!
我听过有人说,不写注释是为了业务保密性!
对于这样的说法,我认为——纯属胡扯!
业务的保密性不应该依托于不写代码注释,而应当加强系统的网络安全,权限控制等方面。如果源码都泄漏了,即便是不写注释也不会阻挡黑客的脚步,除非你的代码足够凌乱、像一坨那啥!
以这样的说辞为借口是绝对站不住脚的!
还有人说,不写注释,没人能看懂自己的代码,自己就是不可取代的。对于这样的说法,我也只是当做玩笑话。因为没有人是不可取代的。
注释,可以让你的代码更富可读性,同时也更容易发现思维上的误区,帮助程序员,不论是自己还是他人,快速地上手修改代码,解决问题。
我相信大部分人写代码的时间只有50%不到,其余都是在专注问题的分析和实现方式的筛选。
如何全面的解决问题,避免线程安全问题、避免性能下降、避免扩展性差等问题,都需要耗费大量的思考时间。
而代码注释,可以帮助我们理清思路。换句话说,将自己的思考过程简单地以注释的形式写下来可以有效的促进缩短这个过程,因为它清晰明了。这种情况对于复杂的问题尤为有效。
有时候,一个非常复杂的问题,很容易想到后面忘了前面。一步一步记下自己思考的过程反而可以有助于梳理,节约时间。
所以,不是因为写注释浪费时间,而是你并没有意识到注释可以不断地塑造我们的思维,从而快速达到目的。
三、一点点总结
我们从因果论出发,深入分析了人们的思维方式,客观困难的存在,到设计注释的初衷,以及注释的一些重要作用,都在全面的阐述一个问题——写注释真的很重要!
归纳起来,注释的作用有以下几点:
1、读代码的时候,有注释的代码可以更好更快地理解业务。
2、注释可以帮助隔空促进交流,放飞自我,缓解压力。
3、写代码的时候,写注释可以帮助理清问题,快速制定实现方案。
虽然,今天并没有总结如何写注释,有些不那么完美。不过,代码有代码的设计模式,还有一些约定俗成的命名和编码规范,架构也有特定的业务应用场景,这些都限制了我们的思考和想象力,如果连注释都要按部就班的,那人生还有什么意思?!
所以,至于如何写注释,还是鼓励大家多多发掘独具魅力的个人风格,也欢迎大家评论区交流自己的写注释心得,或者私信我交流更多程序内外的人和事,感谢!
往期精彩:
对话式情景剖析,String被final修饰的真正原因!一篇足矣
为什么所有Java面试都会问到List、Set、Map?
每个Java开发者都应该知道的Spring注解
大牛都是这样转十六进制字符串的!全是细节呀
老板让我写一个存款功能,存了100,居然蒸发了99块钱
关注Java圣斗士,分析、拆解、重新审视程序内外的人和事!不一样的视角、不一样的领悟、不一样的程序人生!见证全网最靓 IT 头条号的崛起,感谢有你!