“恶心代码”帖子中的一个回复
曾在一个帖子中回复过最恶心的代码,摘抄如下:
Java code
public void process(File file) {
if (file != null) {
if (file.exists()) {
if (!file.isDirectory()) {
if (file.canRead()) {
// do something;
}
}
}
}
}
详见下面这个帖子 23 楼的回复:
你见过最恶心的代码是什么样子的?
http://topic.csdn.net/u/20111020/16/e04cf593-4789-418b-8142-88c231002402.html
本来准备睡觉的,刚才翻了一下这个帖子,得,没法睡了,得发帖子了!
打 23 楼后,回复的同学竟然都异口同声地表明这代码没有问题!
我一直告诫组员,代码中的 for、if 的嵌套不应该超过两层,超过的话得想办法重构。从那个帖子的回复来看,难道是我错了?抑或是我太敏感,还是这个代码真的没有问题?
纯技术帖,谢绝“顶”、“Mark”之类无意义的回复,谢谢配合!
------解决方案-------------------- 当初老师教的也是这么说的 for if 循环嵌套不要超过2到3层
有代码执行效率方面和阅读代码方便的考虑吧
以后继续保持
------解决方案-------------------- 确实有些隐患,一些特殊情况下不执行任何代码就跳过了,在后继的代码中不好界定处于什么状态
------解决方案-------------------- Java code
import com.google.common.base.Preconditions.checkNotNull;
public void process(File file){
checkNotNull(file);
if(file.isFile() && file.canRead(){
...
}
}
------解决方案-------------------- 探讨 确实有些隐患,一些特殊情况下不执行任何代码就跳过了,在后继的代码中不好界定处于什么状态
------解决方案-------------------- checkNotNull很多开源项目的做法是Assert.notNull(file,"参数不能为空"); 很多项目中都有自己的Assert类探讨 Java code import com.google.common.base.Preconditions.checkNotNull; public void process(File file){ checkNotNull(file); if(file.isFile() && file.canRead(){ ... } }
------解决方案-------------------- 是啊!!是初学者
------解决方案-------------------- 重构太多会导致混乱的,楼主不要使用这么多嵌套
------解决方案-------------------- 使用太多的嵌套是不好 但是有时候需要多层嵌套解决问题更加容易
------解决方案-------------------- 嵌套太多了,肯定要重构。
------解决方案-------------------- 支持楼主~~
------解决方案-------------------- 代码中的 for、if 的嵌套三四层应该是可以接受的吧 只是可以接受,尽量不要这样写就好了
------解决方案-------------------- Java code
//一般我喜欢这么做
public void process(File file) {
if (file == null)return;
if(!file.exists())return;
if(file.isDirectory())return;
if(!file.canRead())return;
.....
doSomething
.....
}
------解决方案-------------------- 嵌套太多不好
------解决方案-------------------- 怎么重构啊?给个例子,莫非就是把几个if弄到一块,弄个&&吗? 探讨 引用: 确实有些隐患,一些特殊情况下不执行任何代码就跳过了,在后继的代码中不好界定处于什么状态 超过的话得想办法重构,怎么重构法?谢谢
------解决方案-------------------- com.google.common.base.Preconditions.checkNotNull 这个类原来是androidSDK里的啊,终于找到了,谢谢,又开眼界了
------解决方案-------------------- 大家不要把新手当老手看,他们考虑问题的时候跟我们想的不一样;大家刚出来的时候未必就没写过恶心代码,随着经验的增长,再看以前写的代码,总觉得以前自己好白痴。
------解决方案--------------------