水木社区手机版
首页
|版面-C++程序设计语言(CPlusPlus)|
新版wap站已上线
返回
首页
|
上页
|
2/2
|
转到
主题:“一个函数只有一个出口”,这军规是不是早过时了?
10楼
|
DoorWay
|
2022-05-05 22:00:55
|
只看此ID
提前return是对的。
多个入参(<5)判断,就是 &&,最多换行
多个前置业务判断,一般通过类的设计消除,一个是Create函数里进行复杂的初始化;二是通过多态(加策略模式)拆分各种业务,使每个子类及函数尽可能简单;
如果要在一个函数里判断多个context的变量,多半是设计问题,如果确认设计没问题,就不检查,让其early crash。
根据我的经验,这种代码,层层检查,没几轮就被改的亲妈也不认识了。
纯算法的东西另说。
【 在 z16166 的大作中提到: 】
: 那你咋写这种提前return的?老老实实把每个 "if(!cond) return false;" 写完整?
:
--
FROM 61.185.161.*
11楼
|
z16166
|
2022-05-06 11:40:43
|
只看此ID
有的逻辑就是比较复杂
一个简单的文件读取,都可能有3个左右的early return。
Rust里面还专门给这种带成功/失败的early return搞了个语法糖:? operator
这个帖子对early return总结得比较全面了,有些跟你的办法差不多:
https://medium.com/swlh/return-early-pattern-3d18a41bba8
【 在 DoorWay 的大作中提到: 】
: 提前return是对的。
: 多个入参(<5)判断,就是 &&,最多换行
: 多个前置业务判断,一般通过类的设计消除,一个是Create函数里进行复杂的初始化;二是通过多态(加策略模式)拆分各种业务,使每个子类及函数尽可能简单;
: ...................
--
FROM 111.199.145.*
12楼
|
z16166
|
2022-05-06 11:46:47
|
只看此ID
给ASM/FORTRAN/C这种的
有人翻出了Dijkstra在1969年的原文:
https://softwareengineering.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come-from
而且原文的意思是函数总是返回到同一个地方,而不是从同一个return语句返回。
【 在 eggcar 的大作中提到: 】
: 这个军规是给C的吧
--
FROM 111.199.145.*
13楼
|
eggcar
|
2022-05-06 12:09:16
|
只看此ID
那这原文的传播变形太严重了,现在【几乎】不会遇到了
【几乎】是毕竟还有setjmp longjmp这种花活
【 在 z16166 的大作中提到: 】
: 给ASM/FORTRAN/C这种的
: 有人翻出了Dijkstra在1969年的原文:
:
https://softwareengineering.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come-from
: ...................
--
FROM 111.198.57.*
14楼
|
ylh1969
|
2022-05-14 15:43:21
|
只看此ID
早就不用了。
【 在 z16166 的大作中提到: 】
: 现在都用RAII,实际上可以从一个函数体的任何位置提前return掉,也不会导致leak。
: 现在习惯这种写法了(VC++要打开4165编译警告,防止在返回类型不是bool的函数中误用这个宏):
: #pragma warning(1 : 4165)
: ...................
--
FROM 221.221.50.*
首页
|
上页
|
2/2
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版