javascript - 一个案例有多个中断是不好的做法吗?

标签 javascript loops switch-statement

这是我正在做的事情的 super 简化版本,但想象一下需要在 switch 语句中对一个对象执行多个验证。在验证过程中的任何时候,我们都可能决定不想继续使用该对象。

愚蠢的例子:

var yummies = [
  {name: 'apples', quantity: 3},
  {name: 'apples', quantity: 4}
];

var purchases = [];

for (var i = 0; i < yummies.length; i++) {
  var yummy = yummies[i];
  switch (yummy.name) {
      case 'apples':
        if (purchases.indexOf(yummy.name) > -1) {
          break;
        }

        //A ton of other code including, possibly other breaks

        purchases.push(yummy.name);
        break;
  }
}

return 将不起作用,因为我仍想继续循环。我想我可以使用 continue 语句可以工作,但在 switch/case 中看到 continue 看起来真的不太对劲。

无论如何,在一个case 中有两个break。有什么理由不这样做?

最佳答案

当然这只是一个意见,但我不认为它本身是坏的。但是,嵌套的情况、if 和其他控制结构不会使您的代码具有很好的可读性。在这种情况下,您可能会考虑将代码片段移动到单独的函数中。

因此您的代码可能如下所示:

function purchaseApple(yummyName) {
  if (purchases.indexOf(yummyName) == -1) {
    purchases.push(yummyName);
  }
}

for (var i = 0; i < yummies.length; i++) {
  var yummy = yummies[i];
  switch (yummy.name) {
      case 'apples':
        purchaseApples(yummy.name);
        break;
  }
}

或者甚至可以将条件也移动到函数中:

function tryPurchaseApple(yummyName) {
  if (yummyName == 'apples' && purchases.indexOf(yummyName) == -1) {
    purchases.push(yummyName);
  }
}

for (var i = 0; i < yummies.length; i++) {
  var yummy = yummies[i];
  tryPurchaseApple(yummy.name);
  tryPurchasePears(yummy.name);
}

当然,这些只是建议。很难从这种情况中举出一个明智的例子,没有冒犯。 ;)

关于javascript - 一个案例有多个中断是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32791236/

相关文章:

ruby - 运行线程数组的观察者

c++ - 整数的模数

java - 尽管类在 switch block 中实例化,但它只能调用接口(interface)方法

php - 将列表项添加到 Google map

javascript - 验证失败后 Unresolved promise

javascript - 如何在 polymer 3 中包含外部 html 文件和 js 文件?

无法打破 c 循环

javascript - 如何修改 Elastislide 使其无限循环

c++ - 删除两个 vector C++ 中的相似元素

c# - 带有静态字段的 Switch 语句