第三章 函数
1、函数的第一规则是要短小。第二条规则是还要更短小。
if 语句、else 语句、while 语句等,其中的代码块应该只有一行。该行大抵应该是一个函数调 用语句。
2、只做一件事
如果函数只是做了该函数名下同一抽象层上的步骤,则函数还是只做了一件事。
要判断函数是否不止做了一件事,还有一个方法,就是看是否能再拆出一个函数,该函数不仅只是单纯地重新诠释其实现。
要确保函数只做一件事,函数中的语句都要在同一抽象层级上。
3、自顶向下读代码:向下规则
程序就像是一系列TO起头的段落,每一段都描述当前抽象层级,并引用位于下一抽象层级的后续 TO 起头段落。
4、switch 语句
对于 switch语句,我的规矩是如果只出现一次,用于创建多态对象,而且隐藏在某个继承关系中,在系统其他部分看不到,就还能容忍。
5、使用描述性的名称
别害怕长名称。长而具有描述性的名称,要比短而令人费解的名称好。
别害怕花时间取名字。
选择描述性的名称能理清你关于模块的设计思路,并帮你改进之。
命名方式要保持一致。使用与模块名一脉相承的短语、名词和动词给函数命名。
6、函数参数
最好是没有参数,其次分别是一个参数、两个参数,尽量避免使用三个参数,无论如何都不要用三个以上。
6、1单参数函数
对于有输入参数和返回值的函数需写清函数名,并且在上下文一直使用这个函数名。 对于有输入参数而没有返回值的函数(事件)应该让读者很清楚地了解它是个事件。谨慎地选用名称和上下文语境。
对于以输入参数作为输出参数的看,如果函数要对输入参数进行转换操作,转换结果就该体现为返回值。
6.2 标识参数
向函数传入布尔值简直就是骇人听闻的做法。这样做,方法签名立刻变 得复杂起来,大声宣布本函数不止做一件事。----不应向函数传入布尔值
6.3 两个参数
除了向坐标这样两个坐标非常合理的函数外,应尽量将两个参数的函数分为一个参数的函数。
6.4 参数对象
当参数过多时可以将有关联的参数适当的封装成对象。
6.5 无副作用
它会对自己类中的变量做出未能预期的改动。有时,它会把变量搞成向函数传递的参数或是系统全局变量。无论哪种情况,都是具有破坏性的,会导致古怪的时序性耦合及顺序依赖。
6.6 分隔指令与询问
函数要么做什么事,要么回答什么事,但二者不可得兼。
6.7 使用异常替代返回错误码
6.8 抽离 Try/Catch 代码块
函数应该只做一件事。错误处理就是一件事。如果关键字try在某个函数中存在,它就该是这个函数的第一个单词,而且在 catch/finally代码块后面也不该有其他内容。
6.9 别重复自己
要尽量的消除重复
6.10 结构化编程
每个函数、函数中的每个代码块都应该有一个入口、一个出口。遵循这些规则,意味着在每个函数中只该有一个 return 语句,循环中不能有 break 或 continue 语句,而且永永远远不能有任何 goto 语句。
但对于小函数,这些规则助益不大。只有在大函数中,这些规则才会有明显的好处。
7、 如何写好函数
不断的打磨,重写,直到达到上面的要求
第四章 注释
1、注释的恰当用法是弥补我们在用代码表达意图时遭遇的失败
2、不准确的注释要比没注释坏的多
3、有些注释是必须的,也是有利的。但是真正好的注释是想办法不去写的注释。
好的注释:
4、法律信息
5、提供信息的注释
6、提供信息的注释
比如 解释某个抽象方法的返回值
有时管用,但是最好的方法还是改代码
7、对意图的解释
8、阐释
把某些晦涩难明的参数或返回值的意义翻译为某种可读的形式。最好的方法就是直接讲明,但是对于参数或返回值是一个标准库的一部分,或者是你不能修改的代码,注释就会有用。
9、警示
警告程序员会出现某种后果。
10、TODO注释
在源代码中放置要做的工作列表。TODO解释了为什么该函数的实现部分无所作为,将来应该是怎样。需要定期删除
11、放大某种看起来不合理之物的重要性
12、公共API中的Javadoc
如果在编写公共API,就需要为他编写Javadoc
坏注释:
13、喃喃自语
14、多余的注释
15、循规式注释
16、日志式注释
会让模块变的凌乱不堪,应当全部删除
17、废话注释
18、位置标记
如:
//////Action/////////
标记理应全部删除,如果滥用标记栏,将导致沉醉在背景杂音中,将个别注释忽略掉
19、括号后面的注释
可能对于含有长嵌套的函数存在意义,但是当你想写长嵌套的时候,不如缩短函数。
20、归属与署名
源代码控制器是这类信息最好的归属地。
21、注释掉的代码
源代码管理器可以帮我们记住删除的代码,所以我们无需再用注释来标记,删掉即可。
22、HTML 注释
23、非本地信息
如果非要给出注释,请确保他描述了离它最近的代码。
24、信息过多
25、不明显的联系
注释及其描述的代码之间的联系应该是显而易见的。
26、函数头
27、非公共代码的Javadoc