当前位置: 首页 > news >正文

编写可读代码的艺术

《编写可读代码的艺术》,这本书有一些有趣的地方,可以观摩观摩。

把信息塞进名字中

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

  1. 避免空泛的名字,像tmp和retval,除非使用它们有特殊的理由。

  2. 使用具体的名字来更细致地描述事物——ServerCanStart()这个名字就比CanListenOnPort更不清楚。

  3. 给变量名带上重要的细节——例如,在值为毫秒的变量后面加上_ms。

  4. 为作用域大的名字采用更长的名字——不要用让人费解的一个或两个字母的名字来命名在几屏之间都可见的变量。对于只存在于几行之间的变量用短一点的名字更好。

  5. 有目的的使用大小写、下划线等——例如,你可以在类成员和局部变量后面加上“_”来区分它们。


不会误解的名字是最好的名字

640?wx_fmt=jpeg

  1. 当要定义一个值的上限或下限时,max_和min_是很好的前缀。对于包含的范围,first和last是最好的选择。对于包含/排除范围,begin和end是最好的选择,因为它们最常用。

  2. 当为布尔值命名时,使用is和has这样的词来明确表示它是个布尔值,避免使用反义的词(例如disable_ssl)。

  3. 要小心用户对特定词的期望。例如,用户会期望get()或者size()是轻量的方法。


大家都愿意读有美感的代码

640?wx_fmt=jpeg

  1. 如果多个代码块做相似的事情,尝试让它们有共用的模块。

  2. 把代码按“列”对齐可以让代码更容易浏览。

  3. 如果在一段代码中提到A、B和C,那么不要在另一段中说B、C和A。选择一个有意义的顺序并始终用这样的顺序。

  4. 用空行来把大块代码分成逻辑上的“段落”。


什么地方不需要注释

640?wx_fmt=jpeg

  1. 能从代码本身中迅速地推断的事实。

  2. 用来粉饰烂代码(例如蹩脚的函数名)的“拐杖式注释”——应该把代码改好。


你应该记录下来的想法

640?wx_fmt=jpeg

  1. 对于为什么代码写成这样而不是那样的内在理由(“指导性批注”)。

  2. 代码中的缺陷,使用像TODO:或者XXX:这样的标记。

  3. 常量背后的故事,为什么是这个值。


站在读者的立场上思考

640?wx_fmt=jpeg

  1. 预料到代码中哪些部分会让读者说:“啊?”,给它们加上注释。

  2. 为普通读者意料之外的行为加上注释。

  3. 在文件/类的级别上使用“全局观”注释来解释所有的部分是如何一起工作的。

  4. 用注释来总结代码块,使读者不致迷失在细节中。


把更多的信息装入更小的空间里

640?wx_fmt=jpeg

  1. 当像“it”和“this”这样的代词可能指代多个事物时,避免使用它们。

  2. 尽量精确的描述函数的行为。

  3. 在注释中用精心挑选的输入/输出例子进行说明。

  4. 声明代码的高层次意图,而非明显的细节。

  5. 用嵌入的注释(如Function(/*arg =*/…))来解释难以理解的函数参数。

  6. 用含义丰富的词来使注释简洁。


让代码的控制流更易读

640?wx_fmt=jpeg

  1. 在写一个比较时,把改变的值写在左边,并且把更稳定的值写在右边更好一些。

  2. 你也可以重新排列if/else语句中的语句块。通常来讲,先处理正确的/简单的/有趣的情况。有时这些准则会冲突,但是当不冲突时,这是要遵循的经验法则。

  3. 三目运算符必须在结构非常简单的情况下使用。

  4. 嵌套的代码块需要更加集中精力去理解。应该把它们改写成更加“线性”的代码来避免深嵌套。

  5. 通常来讲提早返回可以减少嵌套并让代码整洁。“保护语句”(在函数顶部处理简单的情况时)尤其有用。


减少变量的数量和让它们尽量“轻量级”来让代码更有可读性

640?wx_fmt=jpeg

  1. 减少变量,即那些妨碍的变量。

  2. 减小每个变量的作用域,越小越好。

  3. 只写一次的变量更好。那些只设置一次值的变量(或者const、final、常量)使得代码更容易理解。


— 【 THE END 】—



精彩回顾  点蓝字即可  

 最霸气的程序员辞职理由,阅后即焚!

 程序员面试神回复,最后一个“过分”了!

♡ 老码农冒死揭开行业黑幕:如何编写无法维护的代码

♡ 程序员相亲约在肯德基被拉黑 网友却说:活该!

 IT人才供不应求,快看看你值多少钱!

 程序员,如果一小时后永久断网,你会干嘛?

 第一个就跪了!程序员专属表情包汇总之开发篇

♡ 女生节的一个分号,引发程序员的疯狂热议

 程序员相声:增删改查


640?wx_fmt=gif


相关文章:

  • 程序员都经历过的那些事
  • 趣图:好虐,程序员和测试之间的关系
  • 程序猿和设计师面试时的巅峰对决
  • 程序员小段子
  • 事情污,但算法不污
  • 2018互联网公司平均薪资Top10:华为垫底,腾讯被逆袭...
  • 为什么程序员千万不要重写代码?
  • 你所见过最恶心的代码片段是怎样的?
  • 一场皆大欢喜的程序员跳槽事件
  • 外国程序员发帖求助:快四十岁了,不知道以后该怎么办
  • 我们计划招收300名学员,免费攻读人工智能专业
  • 漫画趣解——云计算的起源
  • 漫画解析12星座程序员的症状
  • 超高逼格程序员行为规范!
  • 程序员,除了写好代码,你更应该学会这些!
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • Flex布局到底解决了什么问题
  • JavaScript 基础知识 - 入门篇(一)
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Python_OOP
  • React系列之 Redux 架构模式
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 从tcpdump抓包看TCP/IP协议
  • 大数据与云计算学习:数据分析(二)
  • 使用putty远程连接linux
  • 算法---两个栈实现一个队列
  • 为什么要用IPython/Jupyter?
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 学习使用ExpressJS 4.0中的新Router
  • 正则表达式
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • No resource identifier found for attribute,RxJava之zip操作符
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 组复制官方翻译九、Group Replication Technical Details
  • 昨天1024程序员节,我故意写了个死循环~
  • ​iOS实时查看App运行日志
  • #1015 : KMP算法
  • #WEB前端(HTML属性)
  • $.ajax()
  • (3)选择元素——(17)练习(Exercises)
  • (c语言)strcpy函数用法
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)Linux——Linux常用指令
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (排序详解之 堆排序)
  • (三)Honghu Cloud云架构一定时调度平台
  • (原)本想说脏话,奈何已放下
  • (转)Google的Objective-C编码规范
  • (转)http协议
  • (转)Linq学习笔记
  • (转)Linux整合apache和tomcat构建Web服务器