请选择 进入手机版 | 继续访问电脑版

写更容易读的代码

[复制链接]
轩辕文唐 发表于 2021-1-1 17:45:09 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
一、如何起名

不会误解的名字是最好的名字——阅读你代码的人应该明确你的本意,而且不会有其他的明确。遗憾的是,许多英语单词在用来编程时是多义性的,比方filter、length和limit。
在你决定使用一个名字以前,要吹毛求疵一点,来想象一下你的名字会被误解成什么。最好的名字是不会误解的。当要界说一个值的上限或下限时,max_和min_是很好的前缀。对于包罗的范围,first和last是好的选择。对于包罗/清除范围,begin和end是最好的选择,因为它们最常用。
当要界说一个值的上限或下限时,max_和min_是很好的前缀。对于包罗的范围,first和last是好的选择。对于包罗/清除范围,begin和end是最好的选择,因为它们最常用。
当为布尔值定名时,使用is和has这样的词来明确表现它是个布尔值,制止使用反义的词(比方disable_ssl)。
要小心用户对特定词的盼望。比方,用户会盼望get()或者size()是轻量的方法。
二、让代码更有美感

大家都愿意读有美感的代码。通过把代码用一致的、有意义的方式“格式化”,可以把代码变得更容易读,而且可以读得更快。
详细本领:


  • 如果多个代码块做相似的事情,实验让它们有同样的剪影。
  • 把代码按“列”对齐可以让代码更容易浏览。
  • 如果在一段代码中提到A、B和C,那么不要在另一段中说B、C和A。选择一个有意义的顺序,并始终用这样的顺序。
  • 用空行来把大块代码分成逻辑上的“段落”。
三、如何添加注释?

注释的目标是资助读者相识作者在写代码时已经知道的那些事情。
什么地方不需要注释:


  • 能从代码自己中迅速地推断的事实。*
  • 用来粉饰烂代码(比方蹩脚的函数名)的“拐杖式注释”——应该把代码改好。
你应该记载下来的想法包罗:


  • 对于为什么代码写成这样而不是那样的内在理由(“指导性批注”)。
  • 代码中的缺陷,使用像TODO:或者XXX:这样的标记。
  • 常量背后的故事,为什么是这个值
站在读者的立场上思考:


  • 预推测代码中哪些部分会让读者说:“啊?”而且给它们加上注释。
  • 为普通读者意料之外的行为加上注释。
  • 在文件/类的级别上使用“全局观”注释来表明所有的部分是如何一起工作的。
  • 用注释来总结代码块,使读者不致迷失在细节中
四、如何界说变量?

关于步伐中的变量是如何快速累积而变得难以跟踪的。通过淘汰变量的数量和让它们只管“轻量级”来让代码更有可读性。


  • 淘汰变量
  • 减小每个变量的作用域,越小越好。把变量移到一个有最少代码可以看到它的地方。眼不见,心不烦。
  • 只写一次的变量更好。那些只设置一次值的变量(或者const、final、常量)使得代码更容易明确。
五、方法优化

所谓工程学就是关于把大问题拆分成小问题再把这些问题的办理方案放回一起。把这条原则应用于代码会使代码更健壮而且更容易读。
  积极地发现并抽取出不相关的子逻辑
1.看看某个函数或代码块,问问你自己:这段代码高条理的目标是什么?
2.对于每一行代码,问一下:它是直接为了目标而工作吗?这段代码高条理的目标是什么呢?
3.如果足够的行数在办理不相关的子问题,抽取代码到独立的函数中。
六、一次只做一件事

1.列出代码所做的所有“任务”。这里的“任务”没有很严格的界说——它可以小得如“确保这个对象有效”,或者暗昧得如“遍历树中所有结点”。
2.只管把这件任务拆分到差异的函数中,或者至少是代码中差异的段落中。
如果你有很难读的代码,实验把它所做的所有任务列出来。其中一些任务可以很容易地酿成单独的函数(或类)。其他的可以简单地成为一个函数中的逻辑“段落”。详细如何拆分这些任务没有它们已经分开这个事实那样重要。难的是要准确地形貌你的步伐所做的所有这些小事情。
七、真正明确你的代码

如果你不能把一件事表明给你祖母听的话说明你还没有真正明确它。
1.像对着一个同事一样用自然语言形貌代码要做什么。
2.注意形貌中所用的关键词和短语。
3.写出与形貌所匹配的代码。
某个大学盘算机实验室的规定声称当有学生需要别人帮它调试步伐时,他首先要对房间角落的一只专用的泰迪熊表明他遇到的问题。令人惊讶的是,仅仅通过高声把问题形貌出来,往往就能帮这个学生找到办理的办法。这个本领叫做“橡皮鸭技能”。
另一个对待这个问题的角度是:如果你不能把问题说明确或者用词语来做设计,估计是缺少了什么东西或者什么东西缺少界说。把一个问题(或想法)酿成语言真的可以让它更详细。
八、淘汰你的代码

步伐员倾向于低估实现一个功能所要花的工夫。我们乐观地估计了实现一个粗糙原型所要花的时间,但是忘记了在未来代码库的维护、文件以及后增的“重量”所带来的额外时间。
有时候可以通过淘汰需求来淘汰代码。
怎么说“淘汰需求”和“办理更简单的问题”的利益都不为过。需求经常以微妙的方式相互影响。这意味着办理一半的问题大概只需要花四分之一的工夫。
在你第一次开始一个软件项目,而且只有一两个源文件时,一切都很顺利。编译和运行代码转眼就完成,很容易做改动,而且很容易记住每个函数或类界说在哪里。
然后,随着项目标增长,你的目次中加进了越来越多的源文件。很快你就需要多个目次来组织它们了。很难再记得哪个函数调用了哪个函数,而且跟踪bug也要做多一点的工作。
最后,你就有了许多源代码分布在许多差异的目次中。项目很大,没有一个人自己全部明确它。增加新功能变得很痛苦,而且使用这些代码很费力还令人不快。
我们所形貌的是宇宙的自然法则——随着任何坐标系统的增长,把它粘合在一起所需的复杂度增长得更快。
最好的办理办法就是“让你的代码库越小,越轻量级越好”,
就算你的项目在增长。那么你就要:


  • 创建越多越好的“工具”代码来淘汰重复代码。
  • 淘汰无用代码或没有用的功能。
  • 让你的项目保持分开的子项目状态。
  • 总的来说,要小心代码的“重量”。让它保持又轻又灵。
九、删除你的代码

删除没用的代码园丁经常修剪植物以让它们活着而且生长。
同样地,修剪掉碍事和没用的代码也是个好主意。一旦代码写好后,步伐员往往不情愿删除它,因为它代表许多实际的工作量。删掉它大概意味着认可在上面所花的时间就是浪费。
不要这么想!这是一个有创造性的范畴——摄影家、作者和电影制版人也不会保留他们所有的工作
十、重复研究代码库

每隔一段时间,花15分钟来阅读标准库中的所有函数/模块/类型的名字
为什么库这么重要呢?
一个常被引用的统计结果是一个均匀水平的软件工程师天天写出10行可以放到最终产物中的代码。
当步伐员们刚一听到这个,他们根本不相信——“10行代码?我一分钟就写出来了!
”这里的关键词是“最终产物中的”。在一个成熟的库中,每一行代码都代表相当大量的设计、调试、重写、文档、优化和测试。任何继承了这样达尔文进化过程一样的代码行就是很有价值的。这就是为什么重用库有这么大的利益,不但节省时间,还少写了代码。
  冒险、兴奋——绝地武士追求的并不是这些 – 尤达大师
通过以下方法制止编写新代码:


  • 从项目中消除不须要的功能,不要过分设计。
  • 重新思量需求,办理版本最简单的问题,只要能完成工作就行。
  • 经常性地通读标准库的整个API,保持对它们的熟悉水平。

来源:https://blog.csdn.net/weixin_43221207/article/details/111996744
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )