- 浏览: 310593 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1462托马斯,一个12岁的六年级的小孩,自学开发iPhone应用程序 ... -
程序员的七大坏毛病
2011-06-13 06:50 73611.- 所有的程序都写的很 ... -
干嘛不去掉“I”和“Impl”?
2011-05-23 06:33 6144今天早上我仔细研究TopShelf项目的源代 ... -
IBM黑衣小组
2011-05-16 09:44 1967通常,年末是总结反省的好时机。形势好的时候,我们祝贺自己干的漂 ... -
为什么说PHP是个集中营
2011-05-13 08:31 3242有一天我跟在DUMBO 的 ... -
组织一个实干小组
2011-05-11 06:31 1728大概6个月前发生了一件有趣的事情。我的一个朋友 ... -
我们从亚马逊(Amazon)云事故上能学到什么教训
2011-05-10 06:52 3600不管你称它为“云关” ... -
[漫画]天堂里没有程序员!
2011-05-03 08:37 3212幸亏我是无神论者的,不担心自己进不了天堂! ... -
天堂里没有程序员![漫画]
2011-05-03 08:32 1幸亏我是无神论者的,不担心自己进不了天堂! ... -
Twitter从Rails迁移到了Java
2011-04-25 07:51 5087Rail那插满五颜六色鲜艳羽毛的帽子现在跌落到了地上。Tw ... -
编程是一种超能力
2011-04-11 07:59 3917在一个科技和互联网成 ... -
谷歌如何测试软件 —— 第二部分
2011-04-06 07:18 5460为了做到“you build it, yo ... -
做一个女软件工程师的好处
2011-03-21 07:55 8792女软件开发人员在我们这个社会上并不是很多, ... -
没事儿别优化!
2011-03-14 07:43 3392事实上你应该优化,但 ... -
Integer.getInteger 你在逗我玩吗?
2011-03-09 07:19 3638我刚刚发现在 Java 5 里声明的一个方法:Integer. ... -
创业者的80/20法则
2011-03-07 10:23 5271这个世界上开发人员的数目我估计至少有5百万。 通过应用80/ ... -
漫画:软件开发评估过程
2011-03-05 08:55 2232我很喜欢这个漫画,我做过的项目没有一个不是拖拖拉拉的,边开发边 ... -
今天Facebook的价值损半
2011-03-03 10:58 2962最近,天使资金投资人Jason Calacanis 的一份写 ... -
今天,Facebook的价值损半
2011-03-03 10:57 894最近,天使资金投资人Jason Calacanis 的一份写 ... -
为什么搞计算机工作的人总是看上去很清闲
2011-03-02 00:14 3006对于这幅漫画我没什么好说的,因为当你看着它是就会自然的感到其中 ...
相关推荐
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table 4.导入数据库 A:常用source 命令 进入mysql数据库控制台, 如mysql -u root -p mysql>use 数据库 然后使用source命令,后面参数为脚本文件(如...
break 语句 终止当前循环,或者如果与一个label 语句关联,则终止相关联的语句。 call 方法 应用对象的一个方法,用当前对象代替另一对象。 callee 属性 返回正执行的函数对象,它是指定的函数对象的文本正文。 ...
break 语句 终止当前循环,或者如果与一个label 语句关联,则终止相关联的语句。 call 方法 应用对象的一个方法,用当前对象代替另一对象。 callee 属性 返回正执行的函数对象,它是指定的函数对象的文本正文。 ...
break 语句 终止当前循环,或者如果与一个label 语句关联,则终止相关联的语句。 call 方法 应用对象的一个方法,用当前对象代替另一对象。 callee 属性 返回正执行的函数对象,它是指定的函数对象的文本正文。 ...
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1...
InStrRev 函数 返回一个字符串在另一个字符串中出现的位置,是从字符串的末尾算起。 Int 函数 返回数的整数部分。 整数除法运算符(\) 两数相除,返回的商取其整数部分。 Is 运算符 比较两个对象引用变量。 ...
InStrRev 函数 返回一个字符串在另一个字符串中出现的位置,是从字符串的末尾算起。 Int 函数 返回数的整数部分。 整数除法运算符(\) 两数相除,返回的商取其整数部分。 Is 运算符 比较两个对象引用变量。 ...
InStrRev 函数 返回一个字符串在另一个字符串中出现的位置,是从字符串的末尾算起。 Int 函数 返回数的整数部分。 整数除法运算符(\) 两数相除,返回的商取其整数部分。 Is 运算符 比较两个对象引用变量。 ...
InStrRev 函数 返回一个字符串在另一个字符串中出现的位置,是从字符串的末尾算起。 Int 函数 返回数的整数部分。 整数除法运算符(\) 两数相除,返回的商取其整数部分。 Is 运算符 比较两个对象引用变量。 ...
把多个语句用括号{}括起来组成的一个语句称复合语句。 在程序中应把复合语句看成是单条语句,而不是多条语句,例如 { x=y+z; a=b+c; printf(“%d%d”,x,a); } 是一条复合语句。复合语句内的各条语句都必须以分号...
InStrRev 函数 返回一个字符串在另一个字符串中出现的位置,是从字符串的末尾算起。 Int 函数 返回数的整数部分。 整数除法运算符(\) 两数相除,返回的商取其整数部分。 Is 运算符 比较两个对象引用变量。 ...
使用iBATIS只要五分钟我们就可以创建一个完整的应用程序了——当然这不是大型的ERP(Enterprise Resource Planning)解决方案,也不是大规模的电子商务网站,只是一个简单的命令行工具,它可以执行iBATIS SQL Map中...
只要有一个参数的逻辑值为假,则返回FALSE(假)。 语法:AND(logical1,logical2,…)。 参数:Logical1,logical2,…为待检验的1~30个逻辑表达式,它们的结论或为TRUE(真)或为FALSE(假)。参数必须是逻辑值或者...
取汉字拼音的首字母,只要你输入一个汉字,或者是多个汉字就会取出相应的道字母,主要是方便查询使用的 复制代码 16.配置文件操作类 ConfigHelper 1.根据Key取Value值 2.根据Key修改Value 3.添加新的Key ,Value...
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...
如果源文件中有多个类,那么只能有一个类是public类 〔1分〕 如果有一个类是public类,源文件的名字必须与这个类的名字完全相同,扩展名是java 〔2分〕 如果源文件没有public类,源文件的名字只要和某个类的名字...
如果源文件中有多个类,那么只能有一个类是public类 (1分) 如果有一个类是public类,源文件的名字必须与这个类的名字完全相同,扩展名是java (2分) 如果源文件没有public类,源文件的名字只要和某个类的名字...
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table 4.导入数据库 A:常用source 命令 进入mysql数据库控制台, 如mysql -u root -p mysql>use 数据库 然后使用source命令,后面参数为脚本...
函数是一种特定的运算,在程序中要使用一个函数时,只要给出函数名并给出一个或多个参数,就能得到它的函数值。 VBScript内部函数可分为:转换函数、字符串函数、日期和时间函数、数学函数和检验函数。 1.转换函数 ...