- 浏览: 315470 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
lihuabest:
我被坑了几个小时,万恶啊
Integer.getInteger 你在逗我玩吗? -
comsci:
坚决不换XP,一直用到世界末日
Windiows XP永远不会退市 -
rabbitpro:
你就在那儿YY吧,守着老掉牙的东西不放手,说到底是不能接受新鲜 ...
Windiows XP永远不会退市 -
Jclick:
Very good !!
程序员的七大坏毛病 -
Durian:
yuan 写道lllyq 写道烂代码就是烂代码,楼主的案例不过 ...
你的代码写的很烂
别再这样写了:
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里的方法只可以返回一个值,相应的,一个方法应该有且只有一个返回语句。
:)
评论
这是什么逻辑???
那你这么说 java语法直接规定只能写一个return算了 就可以解决所有问题了
这两种代码性能上没有太大的差别,,多一个变量,一些赋值,,
第一种告诉你运行到这里return了 ,不用往下看了,后面一种就木有
另外,,转载请注明出处,,
若是强制说这种不好,必须那样。认为不妥。
private boolean useCatchedActivity(Class<?> c) { boolean flag = false; View view = subViews.get(c.hashCode()); if (view != null) { ViewParent parent = view.getParent(); if (parent == null) { container.addView(view); flag = true; } } else { subViews.remove(c.hashCode()); flag = false; } return flag; }
private boolean useCatchedActivity(Class<?> c) { View view = subViews.get(c.hashCode()); if(view == null){ return false; } ViewParent parent = view.getParent(); if (parent == null) { container.addView(view); return true; } subViews.remove(c.hashCode()); return false; }
这是刚刚写的两段代码,这是还是逻辑不算复杂的情况。
用第一种的是货真价实的SB。
1.代码是否清晰和有多少个return没有关系,代码不清晰的根本原因是把一堆原本可以抽象成其它方法的逻辑堆在一个方法里导致的,就算只有一个return,如果不解决这个根本问题,代码的清晰程度也不会高到哪里,这不是重构的关键。
2.方法里就算有很多return,只要逻辑上是正确和清楚的,我看不出为什么非得整成一个return。在放屁前脱一次裤子的意义是什么呢?
3.楼主的两个例子完全可以归为代码风格,在我看两个逻辑都很清楚。如果这也能上升到烂程序员程度,您可真要检查下自己的大脑了。
String str = ""; if(...){ str = INPUT; }else{ str = SUCCESS; } return str;
是吗?
以前我就是楼主抨击的那种人。楼主说的对,有时这确实不好。
然后一看评论,也对,如果一个小分支(如参数错误、代码行数相对极短),能直接return,也没有必要搞那么多分支。
最后说下个人观点:
一个方法尽量不超过一个屏幕的长度,楼主说的代码难懂的可能性就比较小了。
public void doSomething(String param){
if(param == null){
return;
}
//假如下面有50条语句需要执行
}
你可以说写成这样:
public void doSomething(String param){
if(param != null){
//假如下面有50条语句需要执行
}
}
有什么的差别,从结果上看是没有,不过你不觉得代码多了一层缩进,看起来更费力不
if (true) { // 特殊情况
return true;
}
……
return false; // 正常情况
}
我更喜欢这样写,一个方法往往只有一条主线,其他的都是特殊情况。这就是是防御性编码。
这样写代码少,也很清晰。
赞成这种,这觉得楼主说的有些偏了。。
if(true)
太强了
完成逻辑,返回结果,谁都指定的简单道理
却被你这种人误认子弟
按你的说法,都不用switch,break;
连变量都不用,连返回语句也不用
直接用成员变量,一律void方法不更好?
发表评论
-
一个六年级、12岁的程序员的演讲【视频】
2011-12-18 21:00 1507托马斯,一个12岁的六年级的小孩,自学开发iPhone应用程序 ... -
程序员的七大坏毛病
2011-06-13 06:50 74031.- 所有的程序都写的很 ... -
干嘛不去掉“I”和“Impl”?
2011-05-23 06:33 6257今天早上我仔细研究TopShelf项目的源代 ... -
IBM黑衣小组
2011-05-16 09:44 1999通常,年末是总结反省的好时机。形势好的时候,我们祝贺自己干的漂 ... -
为什么说PHP是个集中营
2011-05-13 08:31 3293有一天我跟在DUMBO 的 ... -
组织一个实干小组
2011-05-11 06:31 1776大概6个月前发生了一件有趣的事情。我的一个朋友 ... -
我们从亚马逊(Amazon)云事故上能学到什么教训
2011-05-10 06:52 3642不管你称它为“云关” ... -
[漫画]天堂里没有程序员!
2011-05-03 08:37 3296幸亏我是无神论者的,不担心自己进不了天堂! ... -
天堂里没有程序员![漫画]
2011-05-03 08:32 1幸亏我是无神论者的,不担心自己进不了天堂! ... -
Twitter从Rails迁移到了Java
2011-04-25 07:51 5130Rail那插满五颜六色鲜艳羽毛的帽子现在跌落到了地上。Tw ... -
编程是一种超能力
2011-04-11 07:59 3967在一个科技和互联网成 ... -
谷歌如何测试软件 —— 第二部分
2011-04-06 07:18 5509为了做到“you build it, yo ... -
做一个女软件工程师的好处
2011-03-21 07:55 8859女软件开发人员在我们这个社会上并不是很多, ... -
没事儿别优化!
2011-03-14 07:43 3438事实上你应该优化,但 ... -
Integer.getInteger 你在逗我玩吗?
2011-03-09 07:19 3677我刚刚发现在 Java 5 里声明的一个方法:Integer. ... -
创业者的80/20法则
2011-03-07 10:23 5305这个世界上开发人员的数目我估计至少有5百万。 通过应用80/ ... -
漫画:软件开发评估过程
2011-03-05 08:55 2268我很喜欢这个漫画,我做过的项目没有一个不是拖拖拉拉的,边开发边 ... -
今天Facebook的价值损半
2011-03-03 10:58 3000最近,天使资金投资人Jason Calacanis 的一份写 ... -
今天,Facebook的价值损半
2011-03-03 10:57 938最近,天使资金投资人Jason Calacanis 的一份写 ... -
为什么搞计算机工作的人总是看上去很清闲
2011-03-02 00:14 3074对于这幅漫画我没什么好说的,因为当你看着它是就会自然的感到其中 ...
相关推荐
Oracle左连接返回多条记录中一条记录的查询语句,更具指定条件分组排序,返回各组中第一条记录
- 流程控制语句可以相互嵌套,例如在循环内部使用if语句,或者在if语句中包含另一个循环。 5. **三元运算符**:`condition ? expression1 : expression2`,如果条件为真,返回expression1的值,否则返回expression...
5. **子查询**:在`SELECT`语句中嵌套另一个`SELECT`语句,称为子查询,它可以用于复杂的数据过滤和计算: ```sql SELECT * FROM Employees WHERE Salary > (SELECT AVG(Salary) FROM Employees); ``` 这将...
举个例子,假设我们有一个名为`Employees`的表,包含`ID`, `Name`, 和`Salary`三列,我们想把所有工资低于5000的员工的工资提升到6000,可以这样写: ```sql UPDATE Employees SET Salary = 6000 WHERE Salary ; ``...
- `if` 语句的嵌套:可以在一个 `if` 语句的语句块内再嵌套其他 `if` 语句,形成多层条件判断。 2. 条件表达式:Python 提供了三元运算符,也称为条件表达式,形式为 `value_if_true if condition else value_if_...
6. **整合简单、无关联的数据库访问**:如果有多个简单的数据库查询语句,可以尝试将其整合成一个复杂的查询,只要这些查询之间没有逻辑上的冲突或依赖关系。 7. **删除重复记录**:在某些情况下,可能需要删除表中...
- **`loop()`**:这是一个无限循环函数,只要程序运行就会一直执行其中的代码。 #### 三、数字I/O 数字输入/输出(I/O)是Arduino中最基础也是最常用的特性之一。 - **`pinMode(pin, mode)`**:此函数用于设置指定...
2. **OR操作符**:只要任意一个条件为真,结果即被包含。 - 示例:查找所有销售额超过1000美元或位于波士顿的商店: ```sql SELECT * FROM Store_Information WHERE sales > 1000 OR store_name = 'Boston'; ```...
- **返回语句**: - **return**:用于从函数中返回值,同时结束函数的执行。 ##### 3. 存储类型关键字(4个) - **auto**:声明一个自动变量,即局部变量。 - **extern**:声明一个变量是在其他文件中定义的,...
在这种形式中,我们使用EXISTS子句与一个临时表(tmp_cust_city)进行关联。这允许我们仅更新那些在临时表中存在的记录。这种方式更安全,因为它不会误更新不匹配的数据。同时,由于我们只在WHERE子句中使用关联,...
只要两个对应位中有一个为1,则结果为1;全为0时,结果为0。 以数字3和6为例: - 数字3的二进制表示为 `0000 0011` - 数字6的二进制表示为 `0000 0110` - 按位与运算的结果为 `0000 0010`,即十进制的2 - ...
INTERSECT返回两个查询结果集的交集,而MINUS返回存在于第一个查询结果集但不在第二个查询结果集中的记录。 #### 16. 字符串连接(Concatenate) 字符串连接函数(如CONCAT)用于将多个字符串字段或值合并为一个...
- **return**:从函数中返回一个值,结束函数执行。 - **throw**:抛出一个异常,中断程序执行。 - **try...catch...finally**:异常处理结构,尝试执行代码,捕获可能出现的异常,最后可以有一个finally块,无论...
**Terms 查询**允许一次指定多个值,只要文档中的字段值与其中一个匹配即可。 ```json GET /blog/blog/_search { "query": { "terms": { "content": ["summary4", "term"] } } } ``` 上述示例表示只要 `...
- Return语句:从方法中返回一个值(对于void方法则无返回值),并结束该方法的执行。 6. 常用的程序设计方法 - 枚举法:列举所有可能情况来解决问题。 - 地推法:根据已知的解,推导出未知解。 - 递归法:函数调用...
1. **SELECT语句**:这是SQL中最重要的一个语句,用于从数据库中选择并返回所需的数据。基本语法为`SELECT column_name FROM table_name`。例如,如果我们要从名为`Store_Information`的表中获取所有店铺名称,我们...
- **多 case 值**:可以在一个 `case` 块中指定多个值,只要这些值的处理方式相同即可。例如: ```java case 1: case 2: System.out.println("工作日"); break; ``` - **字符串作为 case 值**:从 Java 7 ...
对于海量数据,劣质 SQL 语句和优质 SQL 语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的 SQL 语句,提高系统的可用性。 二、SQL 语句编写注意问题 在编写 ...
AND运算符表示所有条件都必须满足,而OR表示只要满足其中一个条件即可。 5. IN关键字:在WHERE子句中,允许在某个范围内进行条件查询,而不是使用多个OR条件。 6. BETWEEN关键字:用于在一定范围内的值之间进行...
break 语句 终止当前循环,或者如果与一个label 语句关联,则终止相关联的语句。 call 方法 应用对象的一个方法,用当前对象代替另一对象。 callee 属性 返回正执行的函数对象,它是指定的函数对象的文本正文。 ...