如何写出整洁代码
【听众:全体研发组||调研组】
引子:
写文章;
整理房间;
处女座;
WHAT:整洁 代码是什么?
整洁:规整而洁净。
代码:程序员开发工具支持的语言写的源文件。
整洁代码:是规整而洁净代码;是清晰、漂亮的代码;还是优雅和高效的代码。
WHY:整洁 代码为什么?
代码不仅仅是用来实现功能,也不是只有自己看的,也得让同事看。
在公司,当代码需要维护||加新功能时,必须先读旧代码:
情况1:
如果同事看你写的代码,乱七八糟的,看起来相当困难。
将直接拖慢程序员的工作,甚至会导致程序员加班。
你就会发现,写的代码一个月之后再看,连自己写的代码也看不懂了。
“虽然程序员自嘲为码农,但是我们真正"种田"(写代码)的时间却远远低于读代码的时间,因为我们要不停地阅读已经存在的代码,找到一个稳妥的解决方案,这个比例大概是10:1。”
曾经有一个很受欢迎的产品,不少人认为这个产品前景十分美好。出人意料的是,开发这个产品的公司,最终倒闭了。据该公司的员工说,当初为了赶产品进度,代码质量很差,后来,代码越写越多,越来越难维护,每次新加功能,都异常艰难,不能及时推出新功能,最终导致公司倒闭。
破窗原理:说如果一栋建筑的一扇窗户破了,没有及时修补,那么久而久之,它的所有窗户都会被人打破。
推广到编码范畴------糟糕的代码会带来更糟糕的修改,久而久之,这些代码就会成为一个沼泽-------越是挣扎,陷得越深。
情况2:
而如果你写的很整洁,代码没有多余的操作,甚至给人一种感觉很清晰、舒服的感觉,不指望他们就乐意看你的代码吧,但至少整洁的代码会让我们"读"的更省力,降低维护时间成本,从而提高编码效率。
“技术债务”:只要你干过两三年的编程,就有可能曾被别人的糟糕代码绊倒过。如果你编程不止两三年,也有可能被这种代码拖过后腿。有些团队在项目初期进展很顺利,但是过一段时间久变得慢如蜗牛。对代码的每次修改都会影响到其他的模块。修改无小事,每次添加或者修改代码,都必须理清思路,想想会对哪些模块产生影响,做好单元测试。
【整洁很重要:
1:整洁的代码能够促进团队合作;
2:整洁的代码能够减少bug的产生;
3:整洁的代码可以降低维护成本;
4:整洁的代码有助于进行代码审查;
5:整洁的代码有助于提升我们的能力;】
HOW:整洁 代码怎么做?
最高境界:“代码大部分时候是用来维护的,而不是用来实现功能的;优秀的代码大部分是可以自描述的,好于文档和注释”。
一、命名:
命名包括变量、函数、参数,类等,一个好的命名能够很好的表述其所承载的业务,从命名上就已经很好的答复了为什么存在,做了什么事,应该怎么用等的大部分的问题,阅读者看到它的时候不必去深究其实现细节,一切都在命名上一目了然。一个好的命名必须是名副其实,不存在歧义(双关语或常见属于冲突),直接了当(否定语句或者误导性命名),只应该做一件事,并且做好它,。
二、函数:
从汇编时代开始的到现在函数一直都存在与我们开发中不可或缺的一部分,结构化组织,重用.作为函数式语言的一等公民,所有程序的第一组代码。
1.好的函数必须足够的小,其次还是足够的小。很容易想像阅读上千行的代码,是多么巨大的自我心理挑战,在实习的时候工作于毫无分层逻辑的WinForm平台下,完全依赖RAD模式带来后置cs页面上千行的代码,每次修改都令我恼怒,恨不得重写整个业务逻辑。
2.一个函数在于短小精悍,只作一件事情,并做好这件事,只做一件事才能得到更好的利用函数名表述自己。
3.好的函数还应该是CQS(查询命令分离)无副作用的(不存在隐藏歧义的背后逻辑),并对其他类型不存在“依恋情节(Feature Envy)“(类中的变量被所有的函数使用这是理想的高内聚,万物皆有其位,而后物尽归其位)。
4.函数的参数应该足够的少,无最好,一次之,再次为二,尽量避免三个以及三个以上,
对于太多的参数你可能该采用IntroduceParameterObject(引入参数对象)。
5.重复的代码。重复在软件系统是万恶的,我们熟悉的分离关注点,面向对象,设计原则…都是为了减少重复提高重用,Don’t repeat yourself!(DRY)。
三、注释、格式:
并不是写出完备的注释就是好的开发人员,如果代码清晰的表述自己意图,那么注释反而多余。在《重构-改善现有代码之道》中Martin Fowler指出多余的注释是一种代码坏味道。就是好的注释随着项目的维护不断的重构很多时候也会变得不那么适应,而我们很少会去主动维护。再则误导性的注释更为使用者所憎恨。当然有时我们也得使用注释,注释并不是万恶的,当我们没法用代码来描述自己的时候,我们需要注释去描述意图;多余有副作用的代码给使用者提供警告注释。TODO开发时进度控制,比如你在进行较大规模领域重构,目前有些逻辑不再适应,不那么自然,而对它的重构还在任务列表最后,你可以选择标注在TODO中,最后完成从ToDoList中去掉每一个TODO任务。
良好的代码格式,会使得我们阅读更容易,一套共同的格式会让我们查找理解更快速。每个团队都应该遵循一套固定的代码格式规范,整个软件系统的统风格统一,而不是各自为政各成一体。
四、代码整洁的常见手段:
1.勤于代码重构;
2.单一职责;
3.避免过长方法和类、参数;
4.高内聚低耦合;
每个函数、每个类和每个模块都全神贯注于一事,完全不受四周细节的干扰和污染。