扳动开关

扳动开关

原文:https://medium.com/hackernoon/flip-the-switch-239d2d479a29

这些年来,我看过(也听过)很多 switch 语句是,甚至 (lol)的原因。我不喜欢讨厌某个特定的特性,道格拉斯·克洛克福特在他的传奇书籍 的第一章中解释了为什么:好的部分 -

大多数编程语言都包含好的部分和不好的部分。我发现,通过只使用好的部分,避免坏的部分,我可以成为一个更好的程序员。

开关声明是一个合格的特征。像大多数有能力的特性一样,它也有很多问题——需要在一个 case 中的每一条语句之后使用 break ,过程控制流,不合适的语法,代码块的处理,等等!不幸的是,解决这些问题需要我们重写它在核心的运行方式,规范会完全改变,这对于像 JavaScript 这样的语言来说,会产生大量的向后兼容性问题。我再次引用克罗克福德的话-

对于标准委员会来说,消除语言中的缺陷几乎是不可能的,因为这样做会导致依赖于那些不良部分的所有不良程序的崩溃。他们通常无能为力,除了在现有的不完美的基础上增加更多的功能。并且新的特征并不总是和谐地相互作用,因此产生了更多坏的部分。

那我们该怎么做呢?我们认为它是一个次优的特性,因为它比 JavaScript 开发人员可用的其他选项差,所以继续前进。今天,我们将研究这些优越的选择之一——对象文字。创建类似于开关的控制流的对象字面方法利用了散列表查找,并且显然使用了对象,JavaScript 语言的基础——我们将它们用于一切

让我们首先来看看这个基本的控制流,它使用一个 switch 语句来报告某种水果的价格。

function getPrice(fruit) {
  var price;
  switch (fruit) {
    case 'orange':
      price = 2.99;
      break;
    case 'apple':
      price = 1.24;
      break;
    case 'cherry':
      price = 3.55;
      break;
    default:
      price = 1.11;
  }
  return 'My fruit costs ' + price;
}console.log(get('apple')); // => My fruit costs 1.24
console.log(getPrice('apricot')); // => My fruit costs 1.10

现在,让我们用一个非常简单的对象来重写它。

function getPrice(fruit) {
  var fruits **=** {
    orange**:** 2.99,
    apple**:** 1.24,
    cherry**:** 3.55,
    default**:** 1.11
  };
  return 'My fruit costs' **+** (fruits[fruit] **||** items['default']);
}

这个已经干净了很多,也短了很多。我们可以通过跳过赋值并使用 || (OR)操作符作为默认值来进一步简化。最重要的是,永远不要忘记一次再破

function getDrink(type) {
  return 'My fruit costs ' **+** ({
    orange**:** 2.99,
    apple**:** 1.24,
    cherry: 3.55
  }[type] || 1.11);
}// undefined || 1.11 === 1.11

到目前为止,您应该能够看出,在创建更清晰的控制流方面,对象文字优于 switch 语句。然而,我们也应该探索它们实际上如何更具可扩展性-

function getPrice(fruit) {
  var fruits = {
    orange: function () {
      return 2.99;
    },
    apple: function () {
      return 1.24;
    },
    cherry: function () {
      return 3.55;
    },
    default: function () {
      return 1.11;
    }
  };
  return (fruits[fruit] || fruits[‘default’])();
}

有时,我们可能需要将复杂的操作分配给控制流中的某个条件,事实上,我们可以将函数内联定义为对象文字的键。显然,在上面的例子中,一个函数是完全不必要的,但它足以证明这种能力。

在编写 JavaScript 应用程序时,使用对象文字来开发自然、干净和灵活的控制流。编码快乐!

黑客中午是黑客如何开始他们的下午。我们是 @AMI 家庭的一员。我们现在接受投稿并乐意讨论广告&赞助机会。

如果你喜欢这个故事,我们推荐你阅读我们的最新科技故事趋势科技故事。直到下一次,不要把世界的现实想当然!


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除