看看 JavaScript 管道运算符提案

JavaScript管道运算符提案,目前是第 1 阶段提案,将向 JavaScript 添加一个新运算符。这个新的运算符将作为语法糖来扩展并使链式函数更具可读性。

为了演示,让我们从一个不使用管道运算符的简单示例开始:

// assume that `withHello`, `withWave` and `capitalize` are available
let greeting = withHello(withWave(capitalize('alligator')))

console.log(greeting) // Hello, Alligator 👋

现在是相同的示例,但使用建议的管道运算符:

let greeting = 'alligator' |> capitalize |> withWave |> withHello

console.log(greeting) // Hello, Alligator 👋

或者以更易读的方式格式化,如下所示:

let greeting = 'alligator' 
  |> capitalize 
  |> withWave 
  |> withHello

console.log(greeting) // Hello, Alligator 👋

如您所见,管道运算符确实可以帮助使代码更清晰易读,并最终更易于维护。

多次递归函数调用,最里面的函数先被调用,也就是说调用的写法需要从最后一个函数调用到第一个函数调用,这样思考和写法可能有点倒退代码。使用管道运算符,将写入的顺序颠倒,首先添加第一个函数调用。

今天使用管道操作符

由于该提案仍处于早期阶段,您将无法在当前浏览器中找到任何支持。我们可以利用Babel使我们今天能够使用它,并且已经转译了适用于所有浏览器的代码。

要开始使用,请确保您在机器上安装了 Node.js。

让我们创建一个新文件夹并初始化一个新项目:

$ mkdir pipeline-operator
$ cd !$ 
$ yarn init -y
$ touch index.js

在 bash 中!$表示最后一个命令的最后一个参数。

初始化 Babel

现在让我们为我们的项目安装 Babel dev 依赖:

$ yarn add -D @babel/cli @babel/core @babel/plugin-syntax-pipeline-operator

.babelrc在项目目录中创建一个名为的新文件

$ touch .babelrc

将以下设置复制并粘贴到.babelrc

{
  "plugins":[
    [
      "@babel/plugin-proposal-pipeline-operator",
      {
        "proposal":"minimal"
      }
    ]
  ]
}

start脚本添加到项目的package.json文件中,该文件将运行babel

"scripts": {
  "start": "babel index.js --out-file pipeline.js --watch"
}

使用我们的新start脚本开始使用 Babel

$ yarn start

在您工作时不要停止此脚本,它处于监视模式,因此在您更改文件时它将继续执行其工作。只需打开另一个控制台选项卡即可运行输出的 JavaScript 文件 ( pipeline.js)。

就是这样,我们现在可以在我们的代码中使用管道运算符了!🎉

用法

让我们首先创建一些辅助函数来使用:

索引.js
function withPrefix(string, prefix = "Hello, ") {
  return prefix + string;
};

function withSuffix(string, suffix = "It's me!") {
  return string + suffix;
}

function capitalize(string) {
  return string[0].toUpperCase() + string.substr(1);
}

function lowerCase(string) {
  return string.toLowerCase();
}

让我们看看我们如何在没有管道运算符的情况下使用它们:

索引.js
let greeting = withPrefix(withSuffix(lowerCase(capitalize('WORLD'))))

console.log(greeting) // Hello, world it's me!

// With arguments

let greeting = withPrefix(withSuffix(lowerCase(capitalize('WORLD')), '. We love you <3'), 'Hi there, ')

console.log(greeting) // Hi there, world. we love you <3

代码看起来有点混乱,对吧?现在让我们看看管道操作符会是什么样子:

索引.js
let greeting = 'WORLD' 
  |> capitalize
  |> lowerCase 
  |> withSuffix 
  |> withPrefix 

console.log(greeting) // Hello, world it's me!

// With arguments

let greeting = 'WORLD'
  |> capitalize
  |> lowerCase
  |> (str => withSuffix(str, '. We love you <3'))
  |> (str => withPrefix(str, 'Hi there, '))

console.log(greeting) // Hi there, world. we love you <3

运行代码:

$ node pipeline.js

如您所见,使用函数参数同样容易。

参数

// ...
|> (str => withPrefix(str, 'Hi there, '))

这只是一个箭头函数。它的第一个参数是我们要处理的内容,'WORLD'在我们的例子中是字符串

您甚至可以使用内置方法:

索引.js
let greetingArray = 'WORLD' 
  |> withPrefix
  |> (str => str.toLowerCase()) 
  |> capitalize
  |> (str => str.split(''))

console.log(greetingArray) // => ["H", "e", "l", "l", "o", ",", " ", "w", "o", "r", "l", "d"]

结论

我希望这篇文章对你有用。请记住,这只是语法糖。使用与否取决于您。如果您喜欢这篇文章,请订阅以接收更多很酷的文章。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁