JavaScript新的Babel版本借鉴F#和Julia编程语言中的干净代码功能
这时候,像Babel这样的转译器派得上用场。Babel可以将用最新版JavaScript编写的代码转换成可在现有和老式浏览器中运行的旧版JavaScript代码。
使用转译器让开发人员可以充分利用较新的JavaScript功能,比如让开发人员可以编写更易读的代码,并使异步编程更容易。
本周发布了Babel 7.5,它在这方面迈出了另一步:为JavaScript添加支持F#和Julia编程语言的一项便利功能。
该版本经配置后可以识别F#管道运算符,该运算符由符号|>表示。
运算符提供了调用只有一个实参的函数的替代方法,比如说允许第2行的代码写成第3行的代码。
function repeat (str) { return str + ", " + str; } repeat("hello") "hello" |> repeat
该管道运算符让开发人员在串联多个函数时(一个函数的结果传递到下一个函数,依次类推),可以编写更易读的代码。
假设你定义了下列函数,这些函数分别重复单词、将单词大写以及添加感叹号。
function repeat (str) { return str + ", " + str; } function capitalize (str) { return str[0].toUpperCase() + str.substring(1); } function exclaim (str) { return str + '!'; }
你可以用JavaScript串联诸函数,无需使用管道运算符,方法如下:
let result = exclaim(capitalize(repeat("hello"))); result //=> "Hello, hello!"
这些函数使用管道运算符串联起来,方法如下:
let result = "hello" |> repeat |> capitalize |> exclaim; result //=> "Hello, hello!"
管道运算符仍处于提议阶段,这意味着要将@babel/plugin-proposal-pipeline-operator添加到Babel配置文件中,才能在Babel中启用它。
将运算符添加到Babel之前,目前管道运算符的五个变种正在评估中;除了现有的minimal变种和Smart变种外,Babel 7.5增添了支持运算符F#变种的功能。
F#管道运算符可以与带多个实参的函数一起使用,只需将它与JavaScript的箭头函数结合使用。在异步编程中使用await关键字时,箭头函数也与F#管道运算符一起使用。你可以在此(https://github.com/tc39/proposal-pipeline-operator)阅读有关管道运算符以及它如何与Babel一起使用的更多详细信息。
Babel 7.5也不再需要依赖多个babel插件以便解析不同JavaScript模块打包工具的动态导入,比如webpack和rollup。相反,开发人员现在只需将@babel/plugin-syntax-dynamic-import插件添加到Babel配置文件中。
Babel不仅可以从较新的JavaScript代码来转译,还可以从JavaScript衍生语言TypeScript来转译。
这个最新的Babel版本还让开发人员可以在其代码中使用TypeScript的命名空间。命名空间让开发人员可以告诉计算机将代码拆分成更小的不同代码块,那样他们可以更确信变量、函数和对象的名称不会冲突。
可以通过在Babel的配置文件中加入以下内容,将支持命名空间的试验性功能添加到Babel的TypeScript插件中。
module.exports = { plugins: [ ["@babel/plugin-transform-typescript", { allowNamespaces: true }] ] }
此处(https://github.com/babel/babel/releases/tag/v7.5.0)附有Babel 7.5版本的完整的其他功能和修复程序。