最近在weibo看到一篇c++利用do{}while(0)来做流程控制,减少goto语句的重复代码量,感觉想法很不错,这里我们假设一个场景,让js也能利用一把do{}while(0)的妙处。 设计场景:
流程可能出现condtion4种情况,当出现condition1-3时,期望执行dosomething1,当出现condition4时,期望执行dosomething2,否则默认执行dosomething3, 同时我们要记录每个condition情况的日志,do_log 我们可能写出如下伪代码: 注,这里我们假设不能够利用switch...case
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) 来重写这个流程控制:
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这段代码了,感觉是不是很好?