代码评审
代码评审是⼀种系统的对别⼈代码的研究,和论⽂审校很类似。
代码评审有两个主要⽬的:
提升代码质量。 找出存在及潜在的bug,分析代码的清晰度以及代码是否严格遵循了当前⼯程的标准。
提升程序员的⽔平。
别写重复的代码(Don’t Repeat Yourself)
仅在需要的地⽅注释
⼀种重要的注释就是规格说明,通常出现在⽅法或者类的前部,⼀般会描述出类或⽅法的⾏为、参数、返回值、⽤ 法/例⼦等等。在Java中,规格说明通常按照Javadoc的标准来写:以 /** 开始,中间⽤ @ -标出参数和返回值, 最后以 */ 结尾。例如:
/**
* Compute the hailstone sequence.
* See http://en.wikipedia.org/wiki/Collatz_conjecture#Statement_of_the_problem
* @param n starting number of sequence; requires n > 0.
* @return the hailstone sequence starting at n and ending with 1.
* For example, hailstone(3)=[3,10,5,16,8,4,2,1].
*/
public static List<Integer> hailstoneSequence (int n) {
...
}
另⼀种重要的注释就是标出是从哪引⽤的别的代码。这在实际编程中是⾮常重要的,当你从别的⽹站上引⽤代码的 时候。
不易理解的代码应该被注释(例如实现⼀些特定的算法)
快速报错/失败(Fail-fast)
快速报错是指代码应该尽可能快的将其中的bug暴露出来。因为问题暴露的越早(越接近),其修复⼯作也会越容易。
避免幻数
除了0,1这⼏个数以外的常数都被称为“ 幻数”,因为它们就好像不知道从哪突然冒出来⼀样。
解决幻数的⼀个办法就是写注释,但是另⼀个更好的办法是声明⼀个具有合理名字的变量。
每⼀个变量有且只有⼀个⽬的
不要重利⽤参数,也不要重利⽤变量。
特别地,⽅法的参数不应该被修改
使⽤好的名称
好的⽅法名和变量名都是⽐较⻓⽽且能⾃我解释的。这种时候注释通常都不必要,因为名字就已经解释了它的⽤ 途。
不要使⽤全局变量
通常来说,我们应该使⽤参数传递和返回值⽽⾮全局变量,或者将它们放到你调⽤的⽅法的所属类中。
在快照图中的各种变量
在我们画快照图的时候,区别不同种类的变量是很重要的:
⽅法⾥⾯的局部变量
⼀个实例化对象中的实例化变量
⼀个类中的静态变量
当⽅法被调⽤的时候,局部变量产⽣,当⽅法返回时,局部变量消失。如果⼀个⽅法被多次同时调⽤(例如递 归),这些⽅法⾥⾯的局部变量互相独⽴,彼此不会影响。
当⼀个对象⽤ new 实例化后,对象中实例化的变量产⽣,当这个对象被垃圾回收时,这个变量消失。每⼀个实例 化对象都有它⾃⼰的实例化变量。
当程序启动时(更准确点说是包含该静态变量的类被加载的时候),静态变量就产⽣了,它会⼀直存活到程序结束。
class Payment {
public double value;
public static double taxRate = 0.05;
public static void main(String[] args) {
Payment p = new Payment();
p.value = 100;
taxRate = 0.05;
System.out.println(p.value * (1 + taxRate));
}
}