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/

相关文章:

javascript - 从 iFrame 获取信息 (document.getElementById)

linux - Bash:在for循环中重复数组

c - 程序跳过 switch case 中的所有 case 并转到 default

javascript - 如果多个字段使用 JavaScript 指定了长度,如何执行函数?

javascript - 从同一域中的不同选项卡/窗口访问弹出窗口

javascript - 选择复选框列表上的所有功能

c - 判断两个三角形是否全等

c - 为了计算一个整数的阶乘,比如 k,我必须写一个语句 kfact = kfact *i。我不明白为什么

C# 多个开关情况相同的值 lambda 语法

go - 在 Golang 中失败