背景
最近敲代码的时候对if else和if return有点纠结,因为这两种写法可以互换,最开始我是用的if else,后面看别人的代码很多用的if return,然后我也开始用if return,然而慢慢我感觉用if return好像有时还不如用if else来得更直观形象。于是我请教了一下老司机。
问题如下:
if else与if return的选择问题
这两种写法可以互换,如下:
if ([responseDict[@"result"] boolValue] == false) { [CQHud showToastWithMessage:responseDict[@"msg"]]; return; } /// code
等效于:
if ([responseDict[@"result"] boolValue] == false) { [CQHud showToastWithMessage:responseDict[@"msg"]]; } else { /// code }
在实际开发中我们如何做出选择?
得到的答案
1. 来自sunnie花儿的回答:
第一种吧,理由:看着舒服
点评:前端妹纸跨领域回答,值得关注。
2. 来自小风哥的回答:
第二种吧,它们是一对儿
点评:好好反思下为什么你会被卖黄片的盯上。
3. 来自馒头君的回答:
看下面代码的逻辑吧。。
如果你的 //code 只是在 else 里,一般说明这是 if 的另一种情况,写在里面比较好,合乎逻辑。
但是如果这个 if 只是个判断,遇 false 就return,不用走下面的逻辑,那么 写在外面比较好。
你看下以下代码:
if (xxx == nil) { NSLog(@"xxx must not is nil"); return; } // code.... if (xxx) { NSLog(@"xxx not is nil"); // code.... }else { NSLog(@"xxx is nil"); // code.... }
点评:segmentfault里唯一一个正经回答,结合代码清晰阐释,毫无疑问他的是最佳答案。
4.来自bestswifter的回答:
1.和 if 中的代码无关(准确的说是我没理解为什么 if 代码对风格选择会有影响)
2.取决于 Code 是否完全能放进 else 里,这里默认可以。
3.建议第二种,if else 更强调一种非此即彼的关系,能够从代码层次上看出来两个逻辑是互斥的,写 return 则是另辟蹊径,得到了相同的效果,但是没有 if else 直观。
4.不要和 true/false 作比较,这是多余的。
点评:默默围观大神回答,不敢出声。。。
5.来自J_Knight_的回答:
如果这两组代码是互斥关系,建议使用if&else;如果是要首先排除某些特殊的错误情况,建议使用return。其实这不是倾向不倾向的问题,也与代码长短无关。写代码是要让读代码的人能尽可能快地理解你的意图。
点评:“写代码是要让读代码的人能尽可能快地理解你的意图”。 当你纠结时,不妨换位思考一下。
总结
到底如何选择,相信你已经有了答案。