多个组合逻辑判断是 if else 更合理 还是 goto 最后输出之前更合理?

2015-09-01 10:31:27 +08:00
 l1905
比方有如下两种例子

第一种写法

```
function a () {
if ($is_pass_1 ) {
if ($is_pass_2 ) {
if ($is_pass_3 ) {
//...
//业务代码处理
return result;
}
}
}
}
```
第二种写法

```
function b () {
if (!$is_pass_1 ) {
//逻辑处理
goto xxxxx;
}
if (!$is_pass_2 ) {
//逻辑处理
goto xxxxx;
}
if (!$is_pass_3 ) {
//逻辑处理
goto xxxxx;
}
//业务代码处理

xxxxxx: #goto 到的位置
// result =
return result
}


```
6182 次点击
所在节点    PHP
61 条回复
cpper
2015-09-01 23:23:01 +08:00
对于 if else 这种判断的,请进行读表形式处理。代码大全有类似介绍
flowfire
2015-09-02 03:17:03 +08:00
@msg7086 不是应该是 do while 1 么、、、
msg7086
2015-09-02 05:39:04 +08:00
@flowfire do while 1 就变成死循环了。
vibbow
2015-09-02 06:14:24 +08:00
try
{
if ( ! aaaa )
{
throw new Exception ('aaa');
}


if ( ! bbb )
{
throw new Exception ('bbb');
}
}
catch (Exception $e )
{

}
flowfire
2015-09-02 06:57:24 +08:00
@msg7086
do while 0
就是只执行一次没什么卵用
do while 1
就是无限循环知道满足条件用 break 跳出。。
有哪里不对么。。
zhczhy
2015-09-02 08:21:28 +08:00
允许用 goto 就 goto ,不允许时大部分情况下都可以 do { ... } while (0 )
V2 上还是得多一些这样的纯技术讨论帖
bdnet
2015-09-02 08:27:02 +08:00
有个叫 switch case

更好的方式可以用字典,如果所用编程语言支持委托的话。

goto 很容易造成死循环
msg7086
2015-09-02 08:27:57 +08:00
@flowfire 你自己好好动脑筋想想吧……不想多吐槽了。
romisanic
2015-09-02 09:09:54 +08:00
@ibremn
不过不管公司要求还是自己写代码,还是尽量避免在一个方法中有过多的 return 。。。
mcfog
2015-09-02 09:22:02 +08:00
别说 goto 了,我连 else 都不想看到,尤其是一眼看不完的()里的条件或超过 3 行的{}里的代码。战术上提前 return ,抽函数,查表什么的方法有的是,战略上说穿了就是自己其实压根没想清楚就在写代码了,自然写的一手好面条
Mysdes
2015-09-02 09:36:29 +08:00
在我还是个程序猿的时候,老师千叮咛万嘱咐,如果没人把刀架你脖子上,能别 goto 就别 goto ,哈哈哈
lizhiqing1996
2015-09-02 09:39:06 +08:00
@flowfire do while 0 只执行一次,满足一定条件可以退出 while 代码块,从而实现了 goto 的功能。如果一直不退出 while 代码块,则 while 代码块里的语句只会执行一次,效果就和没用 while 一样,不会影响代码运行


@msg7086 不知道我说得对不
lizhiqing1996
2015-09-02 09:41:06 +08:00
我怎么看都感觉你的两串代码实现的是不一样的功能,不管是修改前或修改后...
mornlight
2015-09-02 09:42:52 +08:00
@romisanic 这个很奇怪,许多地方是推荐多用 return 少用嵌套 if else 来明确表示方法结束和返回值,代码可读性更高。
myv2ex
2015-09-02 10:30:27 +08:00
尝试利用面向对象的思想, 3 个条件非平级,则必定存在引用包含关系,那么可通过定义基本模型关系,再通过接口注入模型对象到处理模型的操作对象,操作对象中根据业务逻辑定义处理各模型的不同逻辑完成继承关系,通过覆写操作取代过程化的代码处理机制,后期随着业务模型对象的增加,也仅仅是完善模型接口定义及方法而已,对今后代码发展具有积极作用。
WordCount
2015-09-02 11:06:34 +08:00
@akagi +1 这才是正解
soundofu
2015-09-02 13:51:40 +08:00
LZ 的第二种写法作为错误处理的时候也未尝不可,
实际使用中,我采用的更接近 @ibremn 所说的尽早 renturn 。
skydiver
2015-09-02 13:59:00 +08:00
@myv2ex Java 写多了吧兄弟……
Banio
2015-09-02 14:04:48 +08:00
当年学 C 语言的时候 说不推荐用 goto 。。。然后一直我就没用过
ffffwh
2015-09-02 15:30:26 +08:00
有限状态自动机

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

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

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

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

© 2021 V2EX