`

只要一个返回语句

    博客分类:
  • Java
 
阅读更多

 

别再这样写了:

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里的方法只可以返回一个值,相应的,一个方法应该有且只有一个返回语句。

本文英文原文链接:A return to Good Code

中文翻译:只要一个返回语句  http://justjavac.com/java/2012/05/18/a-return-to-good-code.html

分享到:
评论
1 楼 我最爱刘 2013-09-09  
细节决定成败!

相关推荐

    MYSQL常用命令大全

    -d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table 4.导入数据库 A:常用source 命令 进入mysql数据库控制台, 如mysql -u root -p mysql>use 数据库 然后使用source命令,后面参数为脚本文件(如...

    微软JavaScript手册

    break 语句 终止当前循环,或者如果与一个label 语句关联,则终止相关联的语句。 call 方法 应用对象的一个方法,用当前对象代替另一对象。 callee 属性 返回正执行的函数对象,它是指定的函数对象的文本正文。 ...

    javascript文档

    break 语句 终止当前循环,或者如果与一个label 语句关联,则终止相关联的语句。 call 方法 应用对象的一个方法,用当前对象代替另一对象。 callee 属性 返回正执行的函数对象,它是指定的函数对象的文本正文。 ...

    JScript 语言参考

    break 语句 终止当前循环,或者如果与一个label 语句关联,则终止相关联的语句。 call 方法 应用对象的一个方法,用当前对象代替另一对象。 callee 属性 返回正执行的函数对象,它是指定的函数对象的文本正文。 ...

    经典全面的SQL语句大全

     UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1...

    VBSCRIPT中文手册

    InStrRev 函数 返回一个字符串在另一个字符串中出现的位置,是从字符串的末尾算起。 Int 函数 返回数的整数部分。 整数除法运算符(\) 两数相除,返回的商取其整数部分。 Is 运算符 比较两个对象引用变量。 ...

    vb Script参考文档

    InStrRev 函数 返回一个字符串在另一个字符串中出现的位置,是从字符串的末尾算起。 Int 函数 返回数的整数部分。 整数除法运算符(\) 两数相除,返回的商取其整数部分。 Is 运算符 比较两个对象引用变量。 ...

    VBScript 语言参考

    InStrRev 函数 返回一个字符串在另一个字符串中出现的位置,是从字符串的末尾算起。 Int 函数 返回数的整数部分。 整数除法运算符(\) 两数相除,返回的商取其整数部分。 Is 运算符 比较两个对象引用变量。 ...

    VBScript 语言参考中文手册CHM

    InStrRev 函数 返回一个字符串在另一个字符串中出现的位置,是从字符串的末尾算起。 Int 函数 返回数的整数部分。 整数除法运算符(\) 两数相除,返回的商取其整数部分。 Is 运算符 比较两个对象引用变量。 ...

    C语言程序设计标准教程

    把多个语句用括号{}括起来组成的一个语句称复合语句。 在程序中应把复合语句看成是单条语句,而不是多条语句,例如 { x=y+z; a=b+c; printf(“%d%d”,x,a); } 是一条复合语句。复合语句内的各条语句都必须以分号...

    VBSCRIP5 -ASP用法详解

    InStrRev 函数 返回一个字符串在另一个字符串中出现的位置,是从字符串的末尾算起。 Int 函数 返回数的整数部分。 整数除法运算符(\) 两数相除,返回的商取其整数部分。 Is 运算符 比较两个对象引用变量。 ...

    一个程序员的自省 iBATIS In Action:什么是iBATIS(二)

    使用iBATIS只要五分钟我们就可以创建一个完整的应用程序了——当然这不是大型的ERP(Enterprise Resource Planning)解决方案,也不是大规模的电子商务网站,只是一个简单的命令行工具,它可以执行iBATIS SQL Map中...

    Excel函数应用大全.doc

    只要有一个参数的逻辑值为假,则返回FALSE(假)。  语法:AND(logical1,logical2,…)。  参数:Logical1,logical2,…为待检验的1~30个逻辑表达式,它们的结论或为TRUE(真)或为FALSE(假)。参数必须是逻辑值或者...

    C#基类库(苏飞版)

    取汉字拼音的首字母,只要你输入一个汉字,或者是多个汉字就会取出相应的道字母,主要是方便查询使用的 复制代码 16.配置文件操作类 ConfigHelper 1.根据Key取Value值 2.根据Key修改Value 3.添加新的Key ,Value...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    8.5.4 例2:从下一行中返回一个值 204 8.6 First_value和Last_value 205 8.6.1 例子:使用First_value来计算最大值 206 8.6.2 例子:使用Last_value来计算最小值 207 8.7 其他分析函数 207 8.7.1 Nth_value(11...

    自考04747《Java语言程序设计(一)》简答题全集.doc

    如果源文件中有多个类,那么只能有一个类是public类 〔1分〕 如果有一个类是public类,源文件的名字必须与这个类的名字完全相同,扩展名是java 〔2分〕 如果源文件没有public类,源文件的名字只要和某个类的名字...

    最新自考04747《Java语言程序设计(一)》简答题全集资料.doc

    如果源文件中有多个类,那么只能有一个类是public类 (1分) 如果有一个类是public类,源文件的名字必须与这个类的名字完全相同,扩展名是java (2分) 如果源文件没有public类,源文件的名字只要和某个类的名字...

    MySQL命令大全

    -d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table 4.导入数据库 A:常用source 命令 进入mysql数据库控制台, 如mysql -u root -p mysql>use 数据库 然后使用source命令,后面参数为脚本...

    《ASP网络程序设计》实验指导书(网站建设与维护&网络程序设计)

    函数是一种特定的运算,在程序中要使用一个函数时,只要给出函数名并给出一个或多个参数,就能得到它的函数值。 VBScript内部函数可分为:转换函数、字符串函数、日期和时间函数、数学函数和检验函数。 1.转换函数 ...

Global site tag (gtag.js) - Google Analytics