我们一直在错误地使用这些东西!

“嵌套”三元神经的潜能
塔尔斯·阿尔维斯(Talles Alves)摄影( https://unsplash.com/photos/HNiOq7eg8ck

很快,我将向您展示JavaScript中“嵌套”三元尚未开发的潜力。 (还将解释嵌套嵌套引号的用法)。 但首先,让我们谈谈模式匹配

模式匹配可在许多编程语言中找到,包括Scala和Haskell。 它用于识别模式,它为我们提供了一种清晰简洁的方法来确定我们的代码将如何分支。

这是来自Bruce Tate的《 七周最佳七种语言》中 Scala中的模式匹配示例:

def doChore(chore: String): String = chore match {
case “clean dishes” => “scrub, dry”
case “cook dinner” => “chop, sizzle”
case _ => “whine, complain”
}
doChore(“clean dishes”) // -> "scrub, dry"
doChore(“mow lawn”) // -> "whine, complain"

遵循逻辑很简单。 我们只扫描列表中的第一个匹配项,然后在其中找到要返回的值。 如果我们到达列表的末尾,而没有遇到我们要寻找的情况,那么最后我们将找到我们的返回值,这是我们未考虑到的所有情况的全部内容。

以下是Haskell中用于计算阶乘的模式匹配:

factorial :: Integer -> Integer
factorial 0 = 1
factorial x = x * factorial (x - 1)
-- factorial 0 -> 1
-- factorial 1 -> 1
-- factorial 17 -> 355687428096000

只是为了好玩,Prolog中的斐波那契数列:

fib(0, 1).
fib(B, C) :- fib(A, B), C is A + B.
% fib(0, X) -> X = 1.
% fib(1, X) -> X = 1, X = 2.
% fib(144, X) -> X = 233.

我们不能使用模式匹配作为JavaScript中的控制结构,但是如果您斜视, case "clean dishes" (以我们的Scala示例为例)开始看起来有点像布尔测试,而我们确实有。 继续斜视,此JavaScript代码看起来有点像模式匹配:

let result ;
 if (operator === ‘+’) {
result = left + right;
} else if (operator === ‘*’) {
result = left * right;
} else if (operator === ‘-’) {
result = left - right;
} else {
result = left / right;
}

但是我们可以做得更好! 此代码存在一些问题:

  • 即使知道const是首选,我们仍在使用let
  • 我们正在更改在块作用域之外声明的变量的值。
  • 我们通过多次输入分配result =来重复自己。

让我们看看可以用嵌套三元函数做什么,对吗?

const result =
operator === ‘+’ ? left + right
: operator === ‘*’ ? left * right
: operator === ‘-’ ? left — right
: left / right;

嘿,还不错! 让我们回顾一下我们对模式匹配的看法:

遵循逻辑很简单。 我们只扫描列表中的第一个匹配项,然后在其中找到要返回的值。 如果我们到达列表的末尾,而没有遇到我们要寻找的情况,那么最后我们将找到我们的返回值,这是我们未考虑到的所有情况的全部内容。

看来我们已经拥有了一个功能很像模式匹配的工具,它已经可以在JavaScript中使用!

重要的是要注意为什么我们能够做到这一点-格式化“嵌套”三元数以使每一行都有一个条件和一个结果,最后是全部。 因此,我们可以像根本不嵌套那样对其进行读写。 因此引号。 ????无需担心会记住每个嵌套上下文。 一旦确定了一条线适用于您正在考虑的案例,就可以放心地忘记它了。

在JavaScript中避免嵌套三元通常被认为是最佳实践,但这是因为我们通常编写如下代码:

var thing = foo ? bar : baz === qux ? quxx : foobar;

如果您认为这令人困惑,那是因为! ESLint建议解决方案是编写如下代码:

var thing;
if (foo) {
thing = bar;
} else if (baz === qux) {
thing = quxx;
} else {
thing = foobar;
}

但希望现在您意识到还有更好的选择:

var thing =
foo ? bar
: baz === qux ? quxx
: foobar;

您可以在Twitter上关注我@okaybenji

From: https://hackernoon.com/the-untapped-potential-of-nested-ternaries-2cb98079b634

相关文章:

  • 2021-10-31
  • 2021-12-12
  • 2021-06-28
  • 2021-10-15
  • 2021-11-30
  • 2022-02-22
  • 2021-11-27
  • 2021-08-08
猜你喜欢
  • 2021-07-24
  • 2022-12-23
  • 2021-09-24
  • 2022-12-23
  • 2022-12-23
  • 2021-06-24
相关资源
相似解决方案