JavaScript新的Babel版本借鑒F#和Julia編程語言中的干凈代碼功能
譯文【51CTO.com快譯】開發(fā)人員常常無法利用近年來為JavaScript語言添加的語法功能,這是由于要編寫必須在較舊的Web瀏覽器上運(yùn)行的代碼。
這時(shí)候,像Babel這樣的轉(zhuǎn)譯器派得上用場(chǎng)。Babel可以將用最新版JavaScript編寫的代碼轉(zhuǎn)換成可在現(xiàn)有和老式瀏覽器中運(yùn)行的舊版JavaScript代碼。
使用轉(zhuǎn)譯器讓開發(fā)人員可以充分利用較新的JavaScript功能,比如讓開發(fā)人員可以編寫更易讀的代碼,并使異步編程更容易。
本周發(fā)布了Babel 7.5,它在這方面邁出了另一步:為JavaScript添加支持F#和Julia編程語言的一項(xiàng)便利功能。
該版本經(jīng)配置后可以識(shí)別F#管道運(yùn)算符,該運(yùn)算符由符號(hào)|>表示。
運(yùn)算符提供了調(diào)用只有一個(gè)實(shí)參的函數(shù)的替代方法,比如說允許第2行的代碼寫成第3行的代碼。
- function repeat (str) { return str + ", " + str; }
- repeat("hello")
- "hello" |> repeat
該管道運(yùn)算符讓開發(fā)人員在串聯(lián)多個(gè)函數(shù)時(shí)(一個(gè)函數(shù)的結(jié)果傳遞到下一個(gè)函數(shù),依次類推),可以編寫更易讀的代碼。
假設(shè)你定義了下列函數(shù),這些函數(shù)分別重復(fù)單詞、將單詞大寫以及添加感嘆號(hào)。
- function repeat (str) {
- return str + ", " + str;
- }
- function capitalize (str) {
- return str[0].toUpperCase() + str.substring(1);
- }
- function exclaim (str) {
- return str + '!';
- }
你可以用JavaScript串聯(lián)諸函數(shù),無需使用管道運(yùn)算符,方法如下:
- let result = exclaim(capitalize(repeat("hello")));
- result //=> "Hello, hello!"
這些函數(shù)使用管道運(yùn)算符串聯(lián)起來,方法如下:
- let result = "hello"
- |> repeat
- |> capitalize
- |> exclaim;
- result //=> "Hello, hello!"
管道運(yùn)算符仍處于提議階段,這意味著要將@babel/plugin-proposal-pipeline-operator添加到Babel配置文件中,才能在Babel中啟用它。
將運(yùn)算符添加到Babel之前,目前管道運(yùn)算符的五個(gè)變種正在評(píng)估中;除了現(xiàn)有的minimal變種和Smart變種外,Babel 7.5增添了支持運(yùn)算符F#變種的功能。
F#管道運(yùn)算符可以與帶多個(gè)實(shí)參的函數(shù)一起使用,只需將它與JavaScript的箭頭函數(shù)結(jié)合使用。在異步編程中使用await關(guān)鍵字時(shí),箭頭函數(shù)也與F#管道運(yùn)算符一起使用。你可以在此(https://github.com/tc39/proposal-pipeline-operator)閱讀有關(guān)管道運(yùn)算符以及它如何與Babel一起使用的更多詳細(xì)信息。
Babel 7.5也不再需要依賴多個(gè)babel插件以便解析不同JavaScript模塊打包工具的動(dòng)態(tài)導(dǎo)入,比如webpack和rollup。相反,開發(fā)人員現(xiàn)在只需將@babel/plugin-syntax-dynamic-import插件添加到Babel配置文件中。
Babel不僅可以從較新的JavaScript代碼來轉(zhuǎn)譯,還可以從JavaScript衍生語言TypeScript來轉(zhuǎn)譯。
這個(gè)最新的Babel版本還讓開發(fā)人員可以在其代碼中使用TypeScript的命名空間。命名空間讓開發(fā)人員可以告訴計(jì)算機(jī)將代碼拆分成更小的不同代碼塊,那樣他們可以更確信變量、函數(shù)和對(duì)象的名稱不會(huì)沖突。
可以通過在Babel的配置文件中加入以下內(nèi)容,將支持命名空間的試驗(yàn)性功能添加到Babel的TypeScript插件中。
- module.exports = {
- plugins: [
- ["@babel/plugin-transform-typescript", {
- allowNamespaces: true
- }]
- ]
- }
此處(https://github.com/babel/babel/releases/tag/v7.5.0)附有Babel 7.5版本的完整的其他功能和修復(fù)程序。
Babel被許多大公司使用,包括Facebook、Netflix、Cloudflare、PayPal和愛彼迎等。
原文標(biāo)題:JavaScript borrows clean code feature from F# and Julia programming languages in new Babel release,作者:Nick Heath
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】