资讯专栏INFORMATION COLUMN

大牛的代码是这样写的

ad6623 / 3459人阅读

摘要:在公司,一般都会有公司规定的若干规范,在编码时,时刻提醒要遵循这些规范,命名规则缩进规则换行规则团队不分大小,哪怕是个人独立项目,风格统一的代码,是确保代码可读性的前提。

什么样的代码才是好代码

**遵循规范
有意义的命名
足够短的方法体
无歧义的行为**
一篇好的代码,就如同一篇好的文章,结构合理,重点清晰,通俗易懂。积累了足够多的编码经验,在完成功能之余,自然会追求自己的代码更“好看”一些,接下来就谈谈我对于“好代码”的理解。

遵循规范

没有规矩,不成方圆,遵循编码规范,是最基本的素养。在公司,一般都会有公司规定的若干规范,在编码时,时刻提醒要遵循这些规范,命名规则、缩进规则、换行规则……团队不分大小,哪怕是个人独立项目,风格统一的代码,是确保代码可读性的前提。

如果实在不知道应该遵循怎样的编码规范,不妨找找看语言官方是否有推荐的规范说明,比如C#,微软官方就提供了一套编码规范。或者,我们可以找某个大公司的编码规范,这些规范一般都是经过了实际项目实践过的,可以放心使用。

养成了习惯之后,代码就如同学生时代写作文那样,无论内容好坏,首先“卷面分”是能拿到的。

有意义的命名

为你的类、方法、变量选择有意义的命名,相信我,这非常重要,好的代码应该是“自解释”的,不仅可以提高代码可读性,也提高了可维护性。假如,仅仅半年后再读自己的代码时,看着满篇莫名其妙的名称,连代码要实现什么业务逻辑都想不起来了,能做的就只有怀疑人生了吧。

类的命名,应该体现出“是什么”。比如一个提供文件读写功能的类,叫做 FileAccessor 就比 FileHelper 好一些,当然或许分解成 FileWriter 和 FileReader 更适合,但这要视需求而定。

方法的命名,应该体现出“做什么”,描述这个方法实际做了什么处理。比如我们有一个根据名称排序的方法,那么叫做 SortByName 就比简单的 Sort 拥有更好的可读性。

变量的命名,如同类,也应该体现“是什么”。比如一个保存文件完整路径的变量,叫做 a 的话,简直是反人类,叫做 f 好歹能让我猜想这是个有关 file 的变量,如果叫做 filePath 我给90分,如果是 fileFullPath 我就给满分。

足够短的方法体

一旦一个方法写得太长,势必堆积了大量的逻辑,一旦涉及到很多嵌套或者逻辑分支,不说将来的维护难度,就是当下,很容易就把自己也绕懵了吧。

所以一旦法相一个方法体过长,就应该考虑是否需要把一个完整的逻辑段提取成一个独立私有方法了,这样以来,不仅缩短了单个方法的长度,让逻辑更加清晰,也可以有效的降低风险,因为简短代码的逻辑复杂度势必降低,开发人员更容易把握住。

至于“过长”是多长呢?根据个人经验,25行就值得引起注意了,50行基本就是可忍受的上限了,除非及特殊情况,否则尽量不要超过这个上限。曾经维护过单个方法2000多行的人瑟瑟发抖,往事不堪回首。

无歧义的行为

具有隐含行为的方法,危害极大。一个方法,尽量只做一个事情,不要做额外的事,否则很容易带来意想不到的风险。

举个例子,我自己写过的一个方法。基本数据结构类似堆栈,每次从集合中取出一个对象之后,将这个对象移出集合。但是我的方法名称是 GetXXX,结果就是发现每次取一个对象之后,集合莫名其妙(其实业务就是这样没错,但是我不记得这回事儿了)地就会变短,导致后续的处理一塌糊涂。对策有两种,一是把对象移出集合的逻辑拿到 GetXXX 的调用处来做,这样移除动作就是显示可见的了;或者把方法名改成 PopXXX 或者 GetAndRemoveXXX (丑了点,但好歹看得懂),这样以来,至少我们的行为与名称是一致的,消除了歧义。

以上只是简单列举了一些最基本的准则,希望对同样希望写出“好代码”的同行有帮助,感谢阅读。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77623.html

相关文章

  • 如何快速成长为技术大牛?阿里资深技术专家总结亮了

    摘要:上班太忙没时间自己学习很多人认为自己没有成为技术大牛并不是自己不聪明,也不是自己不努力,而是中国的这个环境下,技术人员加班都太多了,导致自己没有额外的时间进行学习。 写在前面 不管是开发、测试、运维,每个技术人员心里多多少少都有一个成为技术大牛的梦,毕竟梦想总是要有的,万一实现了呢!正是对技术梦的追求,促使我们不断地努力和提升自己。然而梦想是美好的,现实却是残酷的,很多同学在实际工作后...

    warkiz 评论0 收藏0
  • react中高阶组件

    摘要:高阶组件深入理解作用以及应用本文主要以通俗易懂的语言表达自己对高阶组件的一些见解,希望大家多多提问高阶组件深入理解高阶组件就是一个函数,传给它一个组件,它返回一个新的组件。新的组件使用传入的组件作为子组件。 react高阶组件深入理解、作用以及应用 本文主要以通俗易懂的语言表达自己对高阶组件的一些见解,希望大家多多提问 高阶组件深入理解 高阶组件就是一个函数,传给它一个组件,它返回一...

    cjie 评论0 收藏0
  • 普通程序员,如何转行人工智能?

    摘要:普通程序员,如何转向人工智能方向,是知乎上的一个问题。领域简介,也就是人工智能,并不仅仅包括机器学习。但是,人工智能并不等同于机器学习,这点在进入这个领域时一定要认识清楚。 人工智能已经成为越来越火的一个方向。普通程序员,如何转向人工智能方向,是知乎上的一个问题。本文是对此问题的一个回答的归档版。相比原回答有所内容增加。 目的 本文的目的是给出一个简单的,平滑的,易于实现的学习方法,帮...

    mingde 评论0 收藏0
  • 那些年我看过书 —— 致敬我大学生活 —— Say Good Bye !

    摘要:开头正式开启我入职的里程,现在已是工作了一个星期了,这个星期算是我入职的过渡期,算是知道了学校生活和工作的差距了,总之,尽快习惯这种生活吧。当时是看的廖雪峰的博客自己也用做爬虫写过几篇博客,不过有些是在前人的基础上写的。 showImg(https://segmentfault.com/img/remote/1460000010867984); 开头 2017.08.21 正式开启我...

    xiaoqibTn 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<