do{}while(0)的用法

最近在weibo看到一篇c++利用do{}while(0)来做流程控制,减少goto语句的重复代码量,感觉想法很不错,这里我们假设一个场景,让js也能利用一把do{}while(0)的妙处。

设计场景:

流程可能出现condtion4种情况,当出现condition1-3时,期望执行dosomething1,当出现condition4时,期望执行dosomething2,否则默认执行dosomething3,

同时我们要记录每个condition情况的日志,do_log

我们可能写出如下伪代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function if_else(condition){
if( condtion1 ){
do_log_c1
do_something_1
}
else if( condtion2 ){
do_log_c2
do_something_1
}
else if( condtion3 ){
do_log_c3
do_something_1
}
else if( condtion4 ){
do_log_c4
do_something_2
}
else{
do_log_c5
do_something_3
}
}

这样我们就利用if和else完成了整个流程的代码,接下来我们利用do{}while(0) 来重写这个流程控制:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function do_while(condition){
do{
if( condition1){
do_log_c1
break;
}
if( condition2) {
do_log_c2
break;
};
if( condition3) {
do_log_c3
break;
};
if( condition4){
do_log_c4
do_something_2
return;
}
else{
do_log_c5
do_something_3
return;
}
}while(0);
do_something_1;
}

这样我们就少写了几遍do_something_1这段代码了,感觉是不是很好?