谈代码整洁之道,如何写出优雅的代码

最近为了制定团队的代码规范,拜读了鲍勃大叔的《代码整洁之道》,读完之后,在如何写出整洁优雅的高质量代码方面有很大的启发。我认为《代码整洁之道》是我们提高编程能力和自我修养必读之书。相信你读完之后,也会受益匪浅。

一、整洁的代码

无论什么时候都需要程序员。我很赞同书中的一个观点,那就是代码需要程序员去编写。有人说过我们的正在临近代码的终结点,人工智能可以自己写代码,不再需要人工编程,程序员完全没用了。这种事永远不会发生,即便是人类,倾其全部的直觉和创造力,也不能满足用户的全部需求。代码是我们用来表达需求的语言,所以代码永存。

每次push代码时,代码都比pull时干净。在我们刚刚接触编程的时候,我们不会意识到什么是槽糕的代码,什么是整洁的代码,当我们接触的代码越来越多的时候,我们会慢慢注重命名和格式,逐渐形成自己的代码风格。但是即使我们的项目经验足够丰富,我们也会写出槽糕的代码。比如说,项目进度急,我们需要快速开发,有人会不断地Ctrl + C和Ctrl + V编写重复的代码,随意命名类、函数、变量和编写臃肿的代码。其实这是一个非常错误的做法,我们千万不能因为时间紧急编写糟糕的代码,否则整个项目的代码会变得越来越糟糕,最后可能导致项目被毁掉或者花费巨大的时间成本和人力成本去重构。糟糕的代码真的可以使我们的开发速度加快吗?从长期来看,糟糕的代码只会拖我们的后腿。花大量时间重构还不如一开始设计好的代码,无论时间多么紧急也要写好的代码,开发时间不足可以和需求方沟通,要坚决写高质量的代码。我们要有一种觉悟,那就是:写代码是一门艺术,利用各种技巧,贯彻刻苦习得的整洁感,写出优雅的代码。

什么是整洁的代码?所有的命名都是名副其实和有意义的;类和函数都遵循单一责任原则,并且高内聚、低耦合;代码可以通过所有测试 ;没有重复代码;整个项目代码风格统一;

二、有意义的命名

命名是编码最重要的一环了,对于类、函数、变量的命名直接影响到我们代码的可读性。代码不仅是给机器运行,还需要给人看,要想别人看得懂,必须谨慎命名。《代码整洁之道》自始至终贯彻的一个观点就是:使用好的命名来提高我们代码的可读性而不是通过注释来说明。取名字最难的地方在于需要良好的描述技巧和共有的文化背景。我们有时会怕其他的开发者反对重命名。如果讨论一下就知道,如果名称改得好,那么大家真的会感激你。

1、名副其实。变量、函数、类的名称应该可以清晰地告诉我们,它为什么存在,它做什么事情,应该怎么使用。而不用通过注释来补充说明

2、避免误导。我们必须避免留下掩藏代码本意的错误线索,应当避免使用与本意相悖的词。

3、做有意义的区分。

4、使用读得出的名称。命名的单词必须是可读,不要随意缩写

5、使用可搜索的名称。命名应该是可以被搜索到的

6、类名。类名和对象应该是名称或名词短语

7、方法名。方法名应该是动词或动词短语

8、使用解决方案领域的名称。记住,只有程序员才会读你的代码。所以尽管使用那些的计算机科学术语、算法名、模式名、数学术语吧,

三、类

1、类的组织。类应该从一组变量列表开始,如果有公共静态变量,应该先出现。然后是私有静态变量,以及私有实体变量。很少会有公共变量。遵循自顶而下的原则。

2、类应该短小。关于类的第一条规则是类应该短小,第二条规则是还要更短小。类的名称应该描述其权责。

3、单一权责原则。单一权责原则(SRP)认为,类或模块应有且有一条加以修改的理由。系统应该有许多短小的类而不是少量巨大的类组成。每个类封装一个权责,只有一个修改的原因,并与少数其他类一起协同达成期望的系统行为。

4、内聚。类应该只有少量的实体变量。类中的每个方法都应该操作一个或多个这种变量。

5、为了修改而组织。对于多数系统,修改将一直持续。每处修改都让我们冒着系统其它部分不能如期望般工作的风险,在整洁的系统中,我们对类加以组织,以降低修改的风险。

四、函数

函数是组成代码最重要的部分。正是有许多函数组成类,许多的类构成一个项目。

1、短小,只做一件事情。函数的第一规则是要短小,第二条规则是还要更短小。函数只做一件事情,如果函数做了多件事情,需要把它拆分成不同的函数。

2、每个函数一个抽象层。要确保函数只做一件事,函数中的语句都要在同一抽象层级上自顶向下读代码:向下规则,让代码拥有自顶向下的阅读顺序,让每个函数后面都跟着下一抽象层级的函数,这样一来,在看函数列表时,就能循抽象层级向下阅读了,我把这叫做向下规则。

3、使用描述性的名称。函数的命名可以清晰地描述函数所做的事情。使用某种命名约定,让函数名称中的多个单词容易阅读,然后使用这些单词给函数取个能说清其功能的名称。选择描述性的名称能理清你关于模块的设计思路,并帮你改进之。追索好名称,往往导致对代码的改善重构。命名方式要保持一致。使用与模块名一脉相承的短语、名词和动词给函数命名。好的命名会有一种深合己意的感觉。

4、尽量少函数参数。最理想的参数数量(零参数函数),其次是一(单参数函数),再次是二(双参数函数),应尽量避免三(三参数函数)。三个或三个以上参数,应该把参数封装为类。

5、使用动词和关键字给函数取名。给函数取个好名字,能较好的解释函数的意图,以及参数顺序和意图

6、分隔指令和查询。函数要么做什么事,要么回答什么事,但二者不可得兼。函数应该修改某个对象的状态,或是返回该对象的有关信息。两样都干常会导致混乱。

7、别重复自己。重复可能是软件中一切邪恶的根源。代码编程中许多原则与实践规则都是为了控制与消除重复而创建的。

8、反复打磨修改,直到写出心中最好的函数。写代码和写文章一样,你先想什么就写什么,然后再打磨他,分解函数,重命名,消除重复,反复斟酌推敲,直至达到你心目中的样子。


五、注释

只有代码能忠实地告诉你它做的事情。那是唯一真正正确的信息来源,所以,尽管有时也需要注释,我们也应该多花心思尽量减少注释量。

1、注释只是辅助工具,不能美化糟糕的代码。写注释的常见动机之一是为了解释糟糕的代码。与其花时间编写解释糟糕的代码的注释,还不如花时间清洁那堆糟糕的代码。

2、真正好的注释是用代码来阐述。唯一真正好的注释就是你想办法不去写的注释,别人看你的代码就明白你所表达的意思。

六、格式

团队应该使用统一的格式规则,使所有的代码都整洁,一致。

1、格式的目的。先明确一下,代码格式很重要,代码风格和可读性会影响到代码的可维护性和可扩展性,所以代码格式不可忽略,必须严肃对待。代码格式关乎沟通,而沟通是专业开发者的头等大事。

2、垂直格式。源文件名称应当简单且一目了然。名称本身应该足够告诉我们是否在正确的模块中,源文件最顶部应该给出高层次概念和算法。细节应该往下渐次展开,直至找到源文件中最底层的函数和细节几乎所有的代码都是从上往下读,从左往右读,每行展现一个表达式或一个子句,每组代码行展示一条完整的思路。这些思路用空白行区隔分开。如果说空白行隔开了概念,靠近的代码行暗示了它们之间的紧密关系。所以紧密相关的代码应该靠近。变量声明应该尽量靠近其使用的位置。若某个函数调用了另外一个,就应该把它们放到一起,而且调用者应该尽可能放在被调用者上面。概念相关的代码应该放到一起,相关性越强,彼此之间的距离就改越短。善用换行。

3、横向格式。代码行应该尽量保持短小,一行代码长度应该控制在80个字符以内。注意缩进与对齐,善用空格。

4、团队规则。每个程序员都有自己喜欢的格式规则,但如果在一个团队中工作,就是团队说了算,一组开发者应该认同一种格式风格,每个成员都应该采用那种风格。使用不同的风格来编写源代码,这样会增加其复杂度。团队应该统一规范,在什么地方放置括号,缩进几个字符,如何命名类、变量和方法如此等等。

七、迭进

通过迭进设计达到整洁目的。遵循四条简单设计的规则:1、运行所有测试 2、不可重复 3、表达程序员的意图 4、尽可能减少类和方法的数量。

1、简单设计规则1:运行所有的测试。遵循有关编写测试并持续运行测试的简单、明确的规则,系统就会更贴近oo低耦合、高内聚度的目标。编写测试引致更好的设计。

2、简单设计规则2-4:重构。有了测试,就能保持代码和类的整洁,方法就是递增式地重构代码。在重构过程中,可以应用有关优秀软件设计的一切知识。提升内聚性,降低耦合度,切分关注度,模块化系统性关注面,缩小函数和类的尺寸,选用更好的名称,如此等等。这也是应用简单设计后的三条规则的地方:消除重复,保证表达力,尽可能减少类和方法的数量。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值