多个 if else 嵌套的代码估计大家都见过。。。头疼!
但是其实很多 if else 可以简化成一个 if,不需要 else,举个例子:
$books = getByAFunc()
if($books) {
do something ...
return something
}else {
do something ....
return something
}
看上去没什么毛病,但是根据业务需求,大部分是可以这么写:
if($books) {
do something...
return something
}
do something...
return something
这只是举个例子,很多时候满足条件的只有一种情况,那我们就可以针对这一种情况处理,其他情况直接 return !
还要一种写法是先处理可能出现的异常错误,然后最后执行下来的就是正确情况!
101
natscat 2018-04-19 16:49:08 +08:00 1
我觉得程序里面应该把每一种可能的执行路径都写清楚
所以我是支持 if...else...这种的 |
102
lightening 2018-04-19 17:17:45 +08:00 1
看情况。如果 if 是作为过滤掉一些非正常情况,那么早早 return 掉是可以接受。如果本来就是两种需要正常处理的情况,当然是 if ... else 更清晰。
|
103
floyda 2018-04-19 17:17:48 +08:00
优秀的代码没有 if 的
|
104
afpro 2018-04-19 17:21:56 +08:00
优秀的代码不拘泥于有没有 if 这种细节 整体的可读性更重要
|
105
dayoushen 2018-04-19 17:22:00 +08:00 1
支持 if-else 匹配,但不支持 if-else if-else if ..-else
如下: char *p = new char[10]; if(condition == true) { do_something() delete []p; p = NULL; return some; } do_else(); delete []p; p = NULL; return some; 你要释放两次指针,只有 if 容易内存泄漏。完美 if-else bool bRet; char *p = new char[10]; if(condition == true) { do_something() bRet = true; } else { do_else() bRet = false; } do_else(); delete []p; p = NULL; return bRet ; |
106
hslx111 2018-04-19 18:57:42 +08:00
else 可以有,但是多层嵌套不应该
|
107
awing 2018-04-19 19:03:04 +08:00 1
是时候祭出这段代码了
```python elif (rootKey == "mode"): # Capitalize it just for good measure value = value.upper() if (value == "LOITER"): self.vehicleWrapper.vehicle.mode = dronekit.VehicleMode("LOITER") elif (value == "STABILIZE"): self.vehicleWrapper.vehicle.mode = dronekit.VehicleMode("STABILIZE") elif (value == "ALT_HOLD"): self.vehicleWrapper.vehicle.mode = dronekit.VehicleMode("ALT_HOLD") elif (value == "GUIDED"): self.vehicleWrapper.vehicle.mode = dronekit.VehicleMode("GUIDED") elif (value == "AUTO"): self.vehicleWrapper.vehicle.mode = dronekit.VehicleMode("AUTO") elif (value == "RTL"): self.vehicleWrapper.vehicle.mode = dronekit.VehicleMode("RTL") elif (value == "BRAKE"): self.vehicleWrapper.vehicle.mode = dronekit.VehicleMode("BRAKE") else: ``` |
110
hansight2018 2018-04-19 19:33:30 +08:00 via Android
refer to "guard clause"
|
111
bobuick 2018-04-19 19:36:19 +08:00
什么鬼。
反了吧,优秀的代码应该要有 else, 如果没 else 说明这个 if 可以再抽象到一个函数里去。 如果是简单的 if, 应该是存在三元表达式的方式表达。 |
112
MeteorCat 2018-04-19 20:47:43 +08:00
涉及业务多的时候,你就知道了
|
113
ww2000e 2018-04-19 20:59:44 +08:00
优秀程序员 tab 是 8 个空格
|
114
yanyuechuixue 2018-04-19 22:49:39 +08:00
认同一部分吧, 如果是发生了某条件需要做一件事, 而不发生的时候不需要做, 那么最好不用 else 只用 if, 提升效率. 而且最好 if 的条件为真的概率要更大.
如果需要分开处理, 那还是用 else 吧. 避免不了的.(当然你要说用两个 if 的话我没话说, 但效率会下降吧?我猜.) |
115
Chingim 2018-04-20 00:51:13 +08:00
求比较, 求更优雅的方案 |
118
elvodn 2018-04-20 01:18:08 +08:00
@Chingim 错误排除用 early return,双分支 if...else... 多分支应该用 switch 吧
``` go func getPlanDone(isSunny, isHappy bool) { switch { case isSunny && isHappy: println("plan-A-step-1") println("plan-A-step-2") case isSunny: println("plan-B-step-1") println("plan-B-step-2") case isHappy: println("plan-C-step-1") println("plan-C-step-2") default: println("plan-D-step-1") println("plan-D-step-2") } } ``` |
119
MrGba2z 2018-04-20 01:47:28 +08:00 1
优秀的代码没有 if
优秀的代码只有优秀的客户才配用 只有一种可能 没有任何 if 没有任何异常 如果发生了 那么就是客户不够优秀 |
120
akira 2018-04-20 01:57:15 +08:00
@Chingim 满足你的愿望。
function getPlanDone(isSunny, isHappy) { var steps = ["D","B","C","A"]; var c = isSunny + isHappy * 2; console.log( 'plan-' + steps[c] + '-step-1' ); console.log( 'plan-' + steps[c] + '-step-2' ); } getPlanDone( true, true); //A getPlanDone( true, false); //B getPlanDone( false, true); //C getPlanDone( false, false); //D PS , 这种过于技巧性的代码不建议在日常工作使用。其实你的第二种写法就非常好了 |
121
akira 2018-04-20 02:01:23 +08:00
@elvodn 没看过 go,好奇的问下,若 isSunny, isHappy 都为真,那么这个 switch 的前 3 个表达式的值都是真。这种情况下 switch 是怎么区分的呢
|
124
zhouquan03 2018-04-20 09:43:53 +08:00
强烈反对写 if 不写 else
LZ 多写代码就会发现漏了 else 逻辑多么可怕 |
125
EanCuznaivy 2018-04-20 09:56:06 +08:00
有些 IDE 会提示你有不必要的 else ……
|
126
loveour 2018-04-20 10:06:47 +08:00
@zhouquan03
赞同。不明白非得不要 else 意义何在。。 |
127
pmispig 2018-04-20 10:22:27 +08:00
优秀的代码必须有 else,证明你有考虑到这种情况。
|
128
hatcloud 2018-04-20 11:36:10 +08:00
|
129
satanandroid 2018-04-20 11:58:47 +08:00
可读性好 逻辑清晰 就是优秀的代码。
和什么 else 不 else 一点关系都没 |
130
lloovve 2018-04-20 12:07:19 +08:00 via iPhone
弄成汇编都一样
|
131
r0ck3r 2018-04-20 12:08:35 +08:00
优秀的代码没有代码
|
132
wibile 2018-04-20 12:10:01 +08:00
优秀的人不写代码!
|
133
eloah 2018-04-20 12:11:33 +08:00
不,是没有性生活的
|
135
Chingim 2018-04-20 12:46:54 +08:00
|
137
wizardoz 2018-04-20 12:59:07 +08:00
代码可以 if else,但是思维模式不能用 if else
就好比修改个功能,认为只要在某个地方加个 if else 就可以解决问题的,多半是坑。 |
139
solobat 2018-04-20 13:03:47 +08:00
以前公司培训说不写 else,后面写多了发现,写上 else 最放心了。
|
140
ryd994 2018-04-20 13:15:59 +08:00
|
141
ty89 2018-04-20 13:17:56 +08:00
优秀的代码没有代码
|
142
armstrong 2018-04-20 14:11:43 +08:00
部分认同,在 Java 里面,如果业务逻辑复杂,出现大量的 if else 的话,可以考虑设计模式,用一些封装、多态来解决。if else 不是问题,如果代码里只有大量的 if else,没有任何抽象、封装,那就是问题
|
143
DRcoding 2018-04-20 14:24:49 +08:00
据说优秀的程序员都没有头发?
据说 Mac 是程序员的标配? 据说 PHP 是世界上最好的语言? ...... |
144
spark 2018-04-20 14:25:36 +08:00 via iPhone
优秀的程序员不写代码,全部外包出去
|
145
SummerWQM 2018-04-20 15:00:16 +08:00
这个说法 我是赞成的 我也是这么写 但是经验大佬给我说 加 else 方便扩展
|
146
X41822N 2018-04-20 16:35:13 +08:00
|
147
changwei 2018-04-20 21:07:11 +08:00
优秀的代码只有 goto
|