第三章函数
3.1 短小
函数的最重要的原则说三遍:短小、短小、短小。
if,else,while等语句,代码块应该尽量只有一行,且此行是一个函数调用语句。函数名应该具有说明性,增加文档的价值。
例:JDK源码:
private static inthugeCapacity(int minCapacity) {
if (minCapacity < 0) //overflow
throw newOutOfMemoryError();//此处可以猜测是抛出内存益出相关错误。
return (minCapacity > MAX_ARRAY_SIZE)? Integer.MAX_VALUE :MAX_ARRAY_SIZE;
}
3.2 只做一件事
函数应该只做一件事。判别方法:是否可以再拆分出一个函数。
3.3 每个函数一个抽象级别。
函数的语句都要在同一抽象层次级别上。例如经典的MVC模型,就是一种抽象级别分离的方法。
自定乡下读代码:向下规则
读程序方法:程序就像一系列TO起头的段落,每一段都描述当前的抽象级别,并引用下一层的抽象级别的段落。
3.4switch语句
抽象工厂设计模式。
3.5 使用描述性的名称
别害怕长名称。具有描述性的名称比段而小令人费解的名称好。
例 c = a*b 应改为result = multiplicand *multiplier,增加可读性。
命名方式要保持一致。
3.6 函数参数
函数参数越少越好,最理想是没有参数,尽量避免三个参数。参数少有利于测试。
ArrayList源码中的方法基本都是不多于一个参数
如果参数需要二个或者三个以上,可以将其中一些参数封装成类。
比较:
Circle make Circle(double x,double y, doubleradius);
Circle makeCircle(Point center, double radius);
3.8分隔指令与询问
函数要么做什么事,要么回答什么事。
3.9.1 抽离try /catch代码块
将try/catch代码块的主体部分抽离出来,另外形成函数。
3.10 别重复自己
3.11结构化编程
Dijkstra规则:每个函数,函数中的代码块应有一个入口,一个出口。且只有一个return语句,循环中不能有break,continue语句,永远不用goto语句。
小结
函数是语言的动词,类是名词。
第六章函数
6.2数据对象的反对称性
过程式代码便于在不改动既有数据结构的前提下添加新函数。
面向对象代码便于在不改动既有函数的前提下添加新类。
6.3得濹忒耳律
模块不应了解他所操作对象的内部情形。
第七章错误处理
错误处理不应搞乱代码逻辑。
7.1使用异常而非返回码
预见异常时,不应出现 print(“xxy异常”)活者return null这种形式
应采用抛出异常的方式
Ex:
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
7.7 别返回null值
7.8 别传递null值
第十章 类
10.1 类的组织
Java约定,类应从一组变量列表开始。如果有公共静态常量,应该先出现。然后是静态私有变量,以及私有实体变量.很少会有公共变量。
10,2 类应该短小
类的名称应当描述其权责。
单一权责原则:类或者模块应有且只有一条加以修改的理由。
类应该只有少量实体变量。
每个变量被每个方法所使用,称该类具有最大的内聚性。
10.3 为了修改而组织
对于多数系统,修改一直持续。