编程过程中, 你是习惯提前返回, 还是统一返回。

2017-04-24 10:42:50 +08:00
 banli

在编程的过程中, 每个人都有每个人的编程习惯。 就比如在写一个函数的时候, 我就喜欢判断一下不符合预期的接口, 提前报错或者提前返回,这样写下了代码会容易看懂, 没有复杂的嵌套判断。 。

然而还一种习惯,就是习惯统一返回。这样就只有一个地方返回,比较好测试预估。但是相应的,代码的各种判断嵌套可能就比提前返回来的多了,看逻辑会吃力一些。

你觉得呢?

6919 次点击
所在节点    问与答
75 条回复
jedrek
2017-04-24 11:08:20 +08:00
我觉得这两种并没有好坏之分。我两种都用,主要是看函数里的逻辑情况,捡逻辑最清晰、最易读的方式写
lany
2017-04-24 11:10:17 +08:00
哪种不费脑用哪种,脑子能不用最好。。。
murmur
2017-04-24 11:10:41 +08:00
有的时候提前返回可以少写 if/else ,尤其是因为参数不合法的
sagaxu
2017-04-24 11:12:46 +08:00
sagaxu
2017-04-24 11:13:19 +08:00
统一返回,是 bad smell
815lbh
2017-04-24 11:18:20 +08:00
提前返回
rozbo
2017-04-24 11:18:56 +08:00
看起来你们都不写 c 和 c++等手动内存管理的语言啊。
在这种语言中,不能够提前返回,否则可能上面申请的内存忘记释放,或者句柄忘记关闭造成内存泄露或僵尸对象。
当然,即使是自动内存管理的语言,也存在需要手动管理的资源。这个时候提前返回同样可能导致问题的发生。
因此,我建议尽量都使用一个返回语句。除非你确定提前返回不会导致问题的发生。而且,在多人协同工作的时候,不会因为别人在前面加了代码而导致问题的发生。
在我们团队,要求所有人在每个函数或者方法里都有且只能有一个 return 语句。
huijiewei
2017-04-24 11:19:48 +08:00
提前返回
coderluan
2017-04-24 11:33:26 +08:00
@rozbo

手动管理内存方法很多,可以创建内存池统一管理,可以规定只在构造之后申请内存,或者是提前返回需要特定错误值,你这只是一种解决方法而已,又不是唯一的方法,怎么能看出来别人不写 C++呢,我反而是感觉你 C++写的少。
sagaxu
2017-04-24 11:36:50 +08:00
@rozbo 写 C++的会不知道 RAII?
Shura
2017-04-24 11:39:09 +08:00
@rozbo 这个语言并没有任何关系,习惯而已。
rozbo
2017-04-24 11:42:09 +08:00
@coderluan 你说的这几种方案对于你个人来说是可以的,但对于团队成员来说就不是那么容易接受的了,在你提出的这几种方案中,实现成本最小的无疑是约束团队成员用统一的返回方式。
你能保证你团队中没有新手吗?
coderluan
2017-04-24 11:53:07 +08:00
@rozbo

我们团队确实没啥新手,假设有的话,也是应该他自己去学习,而不是我们找个简单的办法迁就他。另外实现成本最小的就是 RAII ,简单来说构造申请析构释放,再新手也能学会吧。
jarell
2017-04-24 11:58:00 +08:00
@rozbo goto
rozbo
2017-04-24 11:58:29 +08:00
@coderluan
char * a=(char*) malloc(0x1000);
这种的,怎么 RAII ?
rozbo
2017-04-24 11:58:44 +08:00
@jarell 这个屌。
jarell
2017-04-24 12:01:11 +08:00
@rozbo 该 goto 时就 goto 自己写的开心就好
mkdong
2017-04-24 12:01:13 +08:00
同意 goto ,不仅可以减少不必要的嵌套,还可以统一返回
0915240
2017-04-24 12:03:59 +08:00
fast failed
dingz
2017-04-24 12:13:19 +08:00
@rozbo auto_ptr

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/356908

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX