我很难构建查询以找到答案 - 如果有人有任何输入或替代此方案,我感兴趣:
我正在连续对变量执行一系列操作。如果其中一个操作使变量满足某个条件,我想继续并跳过其余的操作。
我是怎么做到的:
while(true) {
variable x;
performOperation1(x);
if( x meets conditions ) break;
performOperation2(x);
if( x meets conditions ) break;
performOperation3(x);
if( x meets conditions ) break;
//...etc
}
我认为这个问题与语言无关,但我将其标记为JavaScript,因为这就是我现在面临的问题。
答案 0 :(得分:1)
虽然你的问题与语言无关,但我猜测它的最佳答案却不是。例如,这是JS的一种可能性:
var x = init(), idx = -1;
var ops = [performOperation1, performOperation2, performOperation3, ...];
while(x doesn't meet conditions && ++idx < ops.length) {
ops[idx](x);
}
这似乎很好地满足了您最初的担忧,但不是comment您不想将这些计算抽象到自己的函数中。
另一种JS可能性,如果您愿意将此代码移动到它自己的函数中,那就是方法described by fbelanger。
我建议您考虑的方法存在严重缺陷,主要是因为它滥用了while
声明。 while
被设计为循环机制。用它来模拟goto
只是忽略了结构化编码的重点。
答案 1 :(得分:0)
这不行。当x满足任何条件时,你的循环应该导致错误。
function() {
variable x;
performOperation1();
if( x meets conditions ) return x;
performOperation2();
if( x meets conditions ) return x;
performOperation3();
if( x meets conditions ) return x;
//...etc
}
答案 2 :(得分:0)
也许使用Promises,您可以获得更清晰,更易读的代码:
performOperation1().then(performOperation2).then(performOperation3);
您的方法应该返回true
或false
以打破链条。
答案 3 :(得分:0)
以下是我的写作方式:
variable x;
[ function() { performOperation1(x); },
function() { performOperation2(x); },
function() { performOperation3(x); }
].some(function(f) { f(); return x meets conditions; });