切换'非其他'案件?

时间:2016-02-17 10:44:06

标签: coffeescript

是否可以在此代码中删除无用的ok变量?

cond1 = true
cond2 = true
cond3 = true

switch
  when !cond1
    console.log "cond1 failed"
  when !cond2
    console.log "cond2 failed"
  when !cond3
    console.log "cond3 failed"
  else
    ok = true

if !ok then process.exit(1)

console.log "good"

1 个答案:

答案 0 :(得分:1)

您可以将代码更改为

Messenger.Default.Register<SelectTargetGroup>(this, msg => SelectGroup(msg.SelectedTargets));

缺点是重复条件检查。

我想你想要显示所有未满足的条件(因为你在switch语句之后放入了process.exit调用)。如果是这样,您的代码存在的问题是它只显示第一个未实现的条件。所以我只想使用if语句

cond1 = true
cond2 = true
cond3 = true

switch
  when !cond1
    console.log "cond1 failed"
  when !cond2
    console.log "cond2 failed"
  when !cond3
    console.log "cond3 failed"

process.exit(1) if !(cond1 && cond2 && cond3)

console.log "good"

总而言之,您必须确定与您的代码的可读性相比,对条件的一次性检查或一次设置和检查变量是否更加昂贵。

如果不是真正处理性能或内存问题,我会给可读性更高的优先级使用类似的东西:

cond1 = false
cond2 = false
cond3 = true

if !cond1
  console.log "cond1 failed"
if !cond2
  console.log "cond2 failed"
if !cond3
  console.log "cond3 failed"

process.exit(1) if !(cond1 && cond2 && cond3)

console.log "good"

如果你应该在addError调用之前或之后编写条件检查,这取决于条件代码的长度。