原文: A return to Good Code

译文: 只要一个返回语句


别再这样写了:

public boolean foo() {
    if (true) {
        return true;  
    }  else {  
        return false;  
    }
}

每次当我深入某个开源项目,看到大概是某个专家写的、并被有经验的专业人士审查过的这样的代码, 我都会惊讶不已,竟然没有人去阻止这个开发者在这个方法里胡乱的放置返回语句。

请告诉我,把代码写成下面的样子很难吗?

public boolean foo() {  
    boolean flag = true;  
    
    if (true) { 
        flag=true;
    } else {
        flag=false;
    }
    
    return flag;
}

这是java基本常识。 实际上,这不仅是java基本常识,这是小学水平的java知识。 如果你的方法返回一个值,你应该在方法的开始处把它声明做一个变量。 然后再去做一些赋予这个变量正确意义的操作。 然后,在你的最后一行,把这个变量返回给调用程序。 这样做不仅仅是为写出好的代码,这是一种有教养的表现。

你是否曾试图修改过一些在方法里到处都是返回语句的程序代码?无从下手。 事实上,去维护这样的代码,你第一要做的是重新组织它的结构,让它里面不再有一大堆的返回语句。 这样才能把事情做好。 没有任何一个方法是不可以写成只在末尾处有一个的、单一的、易于找到的返回语句的形式的。

的确,烂程序员总有一万个理由来说明他们为什么编写出这样糟糕的程序代码。 “我只是为了避免在返回时一堆的多余的条件判断语句。” 那好,首先,我告诉你,计算机中执行一些条件判断语句时是该死的快,你用短路一个方法来节省CPU的一两个指令操作不是显的太荒诞了吗。 此外,如果这些所谓多余的条件判断语句最终没有派上用场的话,这是否是一个有用的信号来说明你的“多余”的代码可能需要重写, 也许可以把它们重构成另外一个方法,让它们显的不多余?

关键要说的是,没有任何理由可以为写糟糕的代码或当懒惰的程序员做托辞,特别是当写出好的代码并不是那么困难的情况下。 不要在写出里面有成百上千个返回语句的方法了。 java里的方法只可以返回一个值,相应的,一个方法应该有且只有一个返回语句。

继续阅读关于 的文章



Fork me on GitHub