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

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

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

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

你觉得呢?

6919 次点击
所在节点    问与答
75 条回复
liul85
2017-04-24 12:23:39 +08:00
提前返回 少写 if , else
gamexg
2017-04-24 12:24:25 +08:00
@rozbo c 这么说还算合适,但是 c++忘记释放内存? 智能指针想哭。
chunqiuyiyu
2017-04-24 12:27:23 +08:00
能提前返回就一定要提前返回
coderluan
2017-04-24 12:46:58 +08:00
@rozbo

用 a 当类成员变量,该咋整咋整呗,要不你告诉我为啥你认为这种不能 RAII 吧?
otakustay
2017-04-24 13:01:20 +08:00
使用符合语义的提前返回
lrxiao
2017-04-24 13:09:19 +08:00
@dingz 17 年了还 auto_ptr... 难道被三体人锁死了编译器吗
lrxiao
2017-04-24 13:10:41 +08:00
@rozbo std::unique_ptr<char[]> p{new char[1000]};
dingz
2017-04-24 13:20:17 +08:00
@lrxiao 不好意思,表述不当,是想说“智能指针”的,没有特指啥哈
think2011
2017-04-24 13:21:35 +08:00
提前返回,容易看到
wuethan
2017-04-24 13:30:44 +08:00
封装函数更适合提前返回··· 我喜欢清晰的感觉 无限嵌套思路混乱··· 另外只做过串口和数据库交互 没遇到什么需要关闭的问题,数据库都是一次性的查询完就关 串口就是一直打开做判断即可 条件不足就不执行就完了·· 我是不会在打开和关闭之中写 return;的
lrxiao
2017-04-24 13:35:25 +08:00
@dingz 啊我语气太重了..
limhiaoing
2017-04-24 13:57:04 +08:00
@rozbo
auto a = std::make_unique<char[]>(0x1000);
其实现代 C++不需要手动写任何的 new 和 delete 也能把内存资源管理得很好。
举个例子 https://github.com/lxrite/DawnPlayer 是我写的一个 flv demuxer 涉及到大量的内存分配和释放,但是 C++部分的代码一个 delete 都没有写。
rozbo
2017-04-24 14:27:53 +08:00
@limhiaoing
@lrxiao
@coderluan
@gamexg
@dingz
提到 c++的内存,统一返回确实不是唯一的解决方案。
但是各种对象具柄怎么办? c 语言怎么办?数据库连接怎么办?
另外我问的是 char * a=(char*) malloc(0x1000);这种怎么办,请正视问题,不要改写这一段。
难道你们写代码的时候,真的是从来不用 malloc ?
limhiaoing
2017-04-24 14:39:46 +08:00
@rozbo
http://en.cppreference.com/w/cpp/memory/unique_ptr
sto::unique_ptr 的 deleter 是可定制的,你想释放其他资源定制下 deleter 就可以了。
另外 不明白你是什么需求非得用 malloc 而不能用 std::make_unique 。
limhiaoing
2017-04-24 14:41:48 +08:00
上面的链接有用 std::unique_ptr 管理文件资源的例子。
limhiaoing
2017-04-24 14:43:59 +08:00
@rozbo
忘了回答你最后一句了,我写代码确实从来不用 malloc 。
Ouyangan
2017-04-24 14:50:32 +08:00
java-->遇到要返回的话直接就返回 ,避免后面很多 if 判断
htfy96
2017-04-24 14:59:36 +08:00
@rozbo
1. 对象句柄封装下 unique_ptr
2. C 本来就是另一种语言
3. 数据库连接也可以啊:参见 https://github.com/cruisercoder/cppstddb/blob/master/src/cppstddb/mysql/database.h#L104
4. auto a = std::unique_ptr<char[]>(new char[0x1000])
5. 基本不用
sciooga
2017-04-24 15:10:45 +08:00
提前返回一般有更好的可读性
usbuild
2017-04-24 16:04:36 +08:00
C++中不需要 malloc ,甚至有些情况下连 new/delete 都不需要,一般 vector 就够用了。

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

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

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

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

© 2021 V2EX