小言_互联网的博客

麻省理工Java软件构造 Reading 4: Code Review 代码评审

301人阅读  评论(0)

原链接:
MIT Software Construction Reading 4: Code Review

简单来说,代码评审就是由不是写代码的人来对代码进行仔细、系统的检查

代码评审有助于发现程序中的bug,规范代码,但更重要的是,这是程序员之间相互交流、学习的良好途径

比如说在Google,必须有人为你的代码进行评审并签字,你才能将其推送到总仓库里

代码评审(包括自己写代码)时的一些原则:

DRY(Don’t Repeat Yourself)

不要出现重复的或十分相似的代码
因此,Ctrl + C, Ctrl + V 实际上是有很大风险的
因为你很可能在日后发现问题时,修改了一处代码,而漏掉了另一处

好好写注释

对于java而言,最常见的注释就是类和方法前的specification,比如

/**
 * 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) {
    ...
}

注释是和别人交流的方式(包括未来的自己),如果没有注释,时间久了你很可能看不懂你自己的代码,也可能在与他人共同合作时埋下隐患,比如,你的循环是从0到n-1呢,还是 1到n呢

发现问题时尽快做出反应

如果某个方法传入了不合规的参数,我们应该让程序尽快结束,停止执行,抛出异常,或其它,而不是安安静静的让程序带着这个潜在的隐患继续执行

代码中要尽量避免“奇怪的数”

要尽量避免除了0,1(或者加上2)以外的数

比如定义了一个数组int a[100]
那么问题来了,为什么是100?

再比如,用1~12来表示月份并不是很妥当,更好的方法是定义一个枚举类型,这样能增强代码的可读性

一个变量只用于一个目的

一个变量的名字往往说明了它的作用,我们就不应该为了“节约”,而将它用于不是它本职工作的地方

因为变量其实不是一种稀缺资源,如果一个变量完成了它的使命,那么就不要再将它用于其它地方,否则的话会对读代码的人造成困惑(变量没有用于它名字所说明的地方)

不要对传入的参数进行修改

对于一个方法,传入的参数被修改的话,以后再次需要它的信息时,会变得很麻烦

因此,一个很好的习惯是在传入的参数前加上final

public static int dayOfYear(final int month, final int dayOfMonth, final int year) {
    ...
}

好好命名

每一个类,变量,都要有一个有意义的名字,这个名字也要符合(约定俗成的)规范

有一下几点:

  • 方法
    主要为动词
    methodsAreNamedWithCamelCaseLikeThis

  • 变量
    主要为名词
    variablesAreAlsoCamelCase

  • static final的常量CONSTANTS_ARE_IN_ALL_CAPS_WITH_UNDERSCORES


  • ClassesAreCapitalized


  • packages.are.lowercase.and.separated.by.dots

不要使用全局变量

java中,用public static声明的变量就是全局变量

public static int LONG_WORD_LENGTH = 5;

因为是全局的,所以程序的任何部分都可以访问,又因为是变量,大家都可以对它进行修改,这样就有很多的隐患,它可能在不经意间被程序的不知哪个部分给修改了

全局常量则被广泛运用,用public static final来声明一个全局常量

当然,final后面得跟着immutable的类型才行(包括所有的基本数据类型)

方法应该返回结果,而不是输出到控制台

这是新手很容易出现的问题,对于一个方法而言,它只应该完成它的本职工作,利用传入的参数进行计算,然后再返回结果,而不是输出到控制台

输出操作往往是代码最高层的部分(与人交互的部分)做的事情(比如main函数)


转载:https://blog.csdn.net/weixin_43740821/article/details/106266454
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场