`

只要一个返回语句

    博客分类:
  • 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  
细节决定成败!

相关推荐

    Oracle左连接返回多条记录中一条记录的查询语句

    Oracle左连接返回多条记录中一条记录的查询语句,更具指定条件分组排序,返回各组中第一条记录

    流程控制语句

    - 流程控制语句可以相互嵌套,例如在循环内部使用if语句,或者在if语句中包含另一个循环。 5. **三元运算符**:`condition ? expression1 : expression2`,如果条件为真,返回expression1的值,否则返回expression...

    Oracle的sql语句练习题及参考答案

    5. **子查询**:在`SELECT`语句中嵌套另一个`SELECT`语句,称为子查询,它可以用于复杂的数据过滤和计算: ```sql SELECT * FROM Employees WHERE Salary > (SELECT AVG(Salary) FROM Employees); ``` 这将...

    update语句

    举个例子,假设我们有一个名为`Employees`的表,包含`ID`, `Name`, 和`Salary`三列,我们想把所有工资低于5000的员工的工资提升到6000,可以这样写: ```sql UPDATE Employees SET Salary = 6000 WHERE Salary ; ``...

    精品课件 Python从入门到精通 第4章 流程控制语句(共26页).ppt

    - `if` 语句的嵌套:可以在一个 `if` 语句的语句块内再嵌套其他 `if` 语句,形成多层条件判断。 2. 条件表达式:Python 提供了三元运算符,也称为条件表达式,形式为 `value_if_true if condition else value_if_...

    SQL语句执行顺序说明

    6. **整合简单、无关联的数据库访问**:如果有多个简单的数据库查询语句,可以尝试将其整合成一个复杂的查询,只要这些查询之间没有逻辑上的冲突或依赖关系。 7. **删除重复记录**:在某些情况下,可能需要删除表中...

    Arduino语言常用语句

    - **`loop()`**:这是一个无限循环函数,只要程序运行就会一直执行其中的代码。 #### 三、数字I/O 数字输入/输出(I/O)是Arduino中最基础也是最常用的特性之一。 - **`pinMode(pin, mode)`**:此函数用于设置指定...

    最易入门SQL语句教程.pdf

    2. **OR操作符**:只要任意一个条件为真,结果即被包含。 - 示例:查找所有销售额超过1000美元或位于波士顿的商店: ```sql SELECT * FROM Store_Information WHERE sales > 1000 OR store_name = 'Boston'; ```...

    C语言的32个关键字和9种控制语句

    - **返回语句**: - **return**:用于从函数中返回值,同时结束函数的执行。 ##### 3. 存储类型关键字(4个) - **auto**:声明一个自动变量,即局部变量。 - **extern**:声明一个变量是在其他文件中定义的,...

    ORACLE_UPDATE_语句语法与性能分析

    在这种形式中,我们使用EXISTS子句与一个临时表(tmp_cust_city)进行关联。这允许我们仅更新那些在临时表中存在的记录。这种方式更安全,因为它不会误更新不匹配的数据。同时,由于我们只在WHERE子句中使用关联,...

    JAVA经典语句总结

    只要两个对应位中有一个为1,则结果为1;全为0时,结果为0。 以数字3和6为例: - 数字3的二进制表示为 `0000 0011` - 数字6的二进制表示为 `0000 0110` - 按位与运算的结果为 `0000 0010`,即十进制的2 - ...

    SQL语句大全经典教程

    INTERSECT返回两个查询结果集的交集,而MINUS返回存在于第一个查询结果集但不在第二个查询结果集中的记录。 #### 16. 字符串连接(Concatenate) 字符串连接函数(如CONCAT)用于将多个字符串字段或值合并为一个...

    第6章 流程控制语句1

    - **return**:从函数中返回一个值,结束函数执行。 - **throw**:抛出一个异常,中断程序执行。 - **try...catch...finally**:异常处理结构,尝试执行代码,捕获可能出现的异常,最后可以有一个finally块,无论...

    ElasticSearch查询语句

    **Terms 查询**允许一次指定多个值,只要文档中的字段值与其中一个匹配即可。 ```json GET /blog/blog/_search { "query": { "terms": { "content": ["summary4", "term"] } } } ``` 上述示例表示只要 `...

    第三章java流程控制语句.pptx

    - Return语句:从方法中返回一个值(对于void方法则无返回值),并结束该方法的执行。 6. 常用的程序设计方法 - 枚举法:列举所有可能情况来解决问题。 - 地推法:根据已知的解,推导出未知解。 - 递归法:函数调用...

    SQL常用 语句 教程

    1. **SELECT语句**:这是SQL中最重要的一个语句,用于从数据库中选择并返回所需的数据。基本语法为`SELECT column_name FROM table_name`。例如,如果我们要从名为`Store_Information`的表中获取所有店铺名称,我们...

    Java 零基础控制语句 - switch 语句.md

    - **多 case 值**:可以在一个 `case` 块中指定多个值,只要这些值的处理方式相同即可。例如: ```java case 1: case 2: System.out.println("工作日"); break; ``` - **字符串作为 case 值**:从 Java 7 ...

    ORACLE-SQL语句优化技术分析.docx

    对于海量数据,劣质 SQL 语句和优质 SQL 语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的 SQL 语句,提高系统的可用性。 二、SQL 语句编写注意问题 在编写 ...

    sql语句大全免费教程下载

    AND运算符表示所有条件都必须满足,而OR表示只要满足其中一个条件即可。 5. IN关键字:在WHERE子句中,允许在某个范围内进行条件查询,而不是使用多个OR条件。 6. BETWEEN关键字:用于在一定范围内的值之间进行...

    微软JavaScript手册

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

Global site tag (gtag.js) - Google Analytics