成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

來點(diǎn)CoffeeScript嗎?

KavenFan / 1009人閱讀

摘要:一般來說,可以縮短大約的代碼長(zhǎng)度。這就避免了意外創(chuàng)建全局變量。使用表示,不推薦的和將不能使用。因此,使用將是有效的解決方法之一。

簡(jiǎn)單易懂的介紹

CoffeeScript是什么?

首先,它是一門小巧的編程語(yǔ)言。有一本關(guān)于CoffeeScript的指南,寫作“The Little Book on CoffeeScript”:

很小,是嗎?

然后,它是一門JavaScript的轉(zhuǎn)譯語(yǔ)言。這個(gè)轉(zhuǎn)譯過程看起來像這樣:

.coffee的文件將會(huì)被編譯為.js的文件,然后,就像使用JavaScript那樣使用它!

在[coffeescript.org][]上有這樣一句話:

The golden rule of CoffeeScript is: "It"s just JavaScript".

也就是說,良好的面對(duì)CoffeeScript的心態(tài)是,“它只是JavaScript”!

更少代碼

CoffeeScript可以讓你少寫一點(diǎn)代碼。請(qǐng)看下圖:

可見,CoffeeScript精簡(jiǎn)了JavaScript的{}()、;等符號(hào)的使用,并為function、this等關(guān)鍵字定義了簡(jiǎn)單的符號(hào)表示法。這些風(fēng)格轉(zhuǎn)換都使得CoffeeScript代碼量更少。

一般來說,CoffeeScript可以縮短大約1 / 3的代碼長(zhǎng)度。

語(yǔ)言特性增強(qiáng)

CoffeeScript較JavaScript在語(yǔ)言特性上進(jìn)行了改善。在CoffeeScript中,所有的變量聲明都不再使用var關(guān)鍵字:

number = 1.0

CoffeeScript在編譯時(shí)會(huì)自動(dòng)分析上面這樣的語(yǔ)句,如果被賦值的變量未被定義,會(huì)在作用域頂部用var定義變量(由.coffee編譯得到的.js)。這就避免了意外創(chuàng)建全局變量。如果要在CoffeeScript中聲明全局變量,必須用顯式的代碼定義:

window.paintSize = 10

CoffeeScript為字符串拼接提供了更方便的寫法,例如:

drawTitle = "Start from #{number}."

其中number會(huì)取作用域中的對(duì)應(yīng)變量。

CoffeeScript使用is表示===,不推薦的==!=將不能使用。例如:

"draw" if 1 is true

其他的語(yǔ)義化的轉(zhuǎn)化:

CoffeeScript默認(rèn)將最后一條語(yǔ)句作為返回值(受啟發(fā)于Ruby),例如:

description = ->
    console.log "Thinking."
    @

將等同于:

description = function() {
    console.log("Thinking.");
    return this;
};
可能有用的一些說明 隱式括號(hào)

在CoffeeScript中,允許用空格的形式來表示括號(hào),這稱為隱式括號(hào)。但是,隱式括號(hào)使用不當(dāng)會(huì)帶來一些問題,例如:

console.log Math.floor 1.7, Math.ceil 1.7

編譯為.js將是:

console.log(Math.floor(1.7, Math.ceil(1.7)));

這可能不是你想要的結(jié)果。關(guān)于隱式括號(hào)需要理解的一點(diǎn)是:直到表達(dá)式末尾,隱式括號(hào)才會(huì)閉合。所以,建議的寫法是,單條語(yǔ)句只在第一處位置使用隱式括號(hào),其他位置都顯式地把括號(hào)寫出來。例如:

console.log Math.floor(1.7), Math.ceil(1.7)

將正確編譯為:

console.log(Math.floor(1.7), Math.ceil(1.7));

此外,不帶參數(shù)的函數(shù)調(diào)用,將不能省略括號(hào)。例如你想要init();語(yǔ)句,那么在CoffeeScript中你也需要寫作init()。

語(yǔ)句都是表達(dá)式

在CoffeeScript中,所有的語(yǔ)句都視為表達(dá)式。請(qǐng)看這樣的語(yǔ)句:

name = if 1 is true 
    "green tea" 
else 
    "black tea"

這在CoffeeScript中是合法的,將被編譯為:

name = 1 === true ? "green tea" : "black tea";

因此可以正常運(yùn)行。類似的,其他種類的語(yǔ)句也可以這樣使用,CoffeeScript都會(huì)很好地處理它們。

從CoffeeScript中學(xué)習(xí)JavaScript

CoffeeScript所做的很多語(yǔ)言特性增強(qiáng),都來源于JavaScript的最佳實(shí)踐??匆豢淳幾g后的JavaScript,就可以了解到CoffeeScript是如何實(shí)現(xiàn)的,這可能對(duì)學(xué)習(xí)JavaScript也有所幫助。例如,CoffeeScript可使用?在賦值之前檢查變量是否存在:

draw?.tool = "pencil"

編譯后的代碼:

if (typeof draw !== "undefined" && draw !== null) {
    draw.tool = "pencil";
}

這里CoffeeScript展示了JavaScript的“空比較”的最正確的方法。

再例如,CoffeeScript可使用=>來定義綁定上下文(this)的函數(shù):

rest = (drink) =>
    @status = "Have a #{drink}!"

對(duì)應(yīng).js是:

rest = (function(_this) {
    return function(drink) {
        return _this.status = "Have a " + drink + "!";
    };
})(this);

可以看到CoffeeScript用了一個(gè)特定結(jié)構(gòu)實(shí)現(xiàn)了函數(shù)綁定,這個(gè)寫法也同樣是有用的參考。

CoffeeScript調(diào)試的問題

你可能也想到了,如果需要調(diào)試,瀏覽器的錯(cuò)誤提示是針對(duì)編譯后的JavaScript而不是原CoffeeScript,因此調(diào)試分析會(huì)比較麻煩。這是事實(shí),但我認(rèn)為影響不大,有以下幾點(diǎn)原因:

語(yǔ)法錯(cuò)誤會(huì)在CoffeeScript編譯時(shí)提示,這個(gè)提示針對(duì)CoffeeScript源碼,可以預(yù)先看到(如果不修正,是不能得到編譯后的JavaScript的)。

CoffeeScript和JavaScript實(shí)現(xiàn)同一邏輯功能的結(jié)構(gòu)差異較小,如果有錯(cuò)誤,可以類比推斷。

CoffeeScript支持Source Maps,可以在編譯同時(shí)生成.map文件,幫助調(diào)試。

其他JavaScript的轉(zhuǎn)譯語(yǔ)言

可以轉(zhuǎn)譯為JavaScript的語(yǔ)言一般稱為altJSAlternative JavaScript)。JavaScript語(yǔ)言本身有較多不方便、有缺陷的地方,且自由度過高,因人和JavaScript庫(kù)的不同,代碼風(fēng)格可能會(huì)相差很大,難于維護(hù)。因此,使用altJS將是有效的解決方法之一。

除本文介紹的CoffeeScript外,主流alsJS還有TypeScript[]。其中Haxe除JavaScript外,還可以編譯為其他各類平臺(tái)的語(yǔ)言,如C++、C#、Java等,算是通用型編程語(yǔ)言。根據(jù)實(shí)際開展工作的需要,這些altJS也都值得嘗試。

結(jié)語(yǔ)

總的來說,CoffeeScript相比JavaScript,寫起來代碼會(huì)少一點(diǎn),好用的語(yǔ)言特性要多一點(diǎn),大概就像是在用一種更標(biāo)準(zhǔn)的形式使用JavaScript。

“它只是JavaScript”,保持這樣的心態(tài),CoffeeScript也許可以幫到你。

(重新編輯自我的博客,原文地址:http://acgtofe.com/posts/2014/11/have-a-cup-of-coffeescript)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85396.html

相關(guān)文章

  • 《JavaScript快速全棧開發(fā)》作者Azat Mardanov:現(xiàn)在是擁抱Node技術(shù)棧的最佳時(shí)

    摘要:長(zhǎng)期以來,他都是和等機(jī)構(gòu)的講師,其技術(shù)課程獲得一致好評(píng)。但是,如果讓我預(yù)測(cè)的話,我認(rèn)為未來是很光明的,而現(xiàn)在就是擁抱技術(shù)棧的最佳時(shí)機(jī)。所以在瀏覽器和服務(wù)器之間代碼不需要上下文切換。如果沒有上下文切換,那么生產(chǎn)力也會(huì)更高。 非商業(yè)轉(zhuǎn)載請(qǐng)注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/195742 Azat Mardan...

    Rango 評(píng)論0 收藏0
  • Nicholas C. Zakas:我熱愛互聯(lián)網(wǎng)技術(shù)的種種異端

    摘要:圖靈社區(qū)看來,移動(dòng)互聯(lián)網(wǎng)開發(fā)會(huì)成為下一行業(yè)焦點(diǎn),你覺得呢移動(dòng)互聯(lián)網(wǎng)開發(fā)已經(jīng)是焦點(diǎn)了。圖靈社區(qū)現(xiàn)在有很多基于改進(jìn)的語(yǔ)言,比如,等等。熱愛跨瀏覽器開發(fā)帶來的挑戰(zhàn)熱愛互聯(lián)網(wǎng)技術(shù)的種種異端,熱愛業(yè)內(nèi)的同行,熱愛你的工具。 非商業(yè)轉(zhuǎn)載請(qǐng)注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/1791 尼古拉斯·澤卡斯(Nicholas...

    PascalXie 評(píng)論0 收藏0
  • 【趣味連載】攻城獅上傳視頻與普通人上傳視頻:(一)生成結(jié)構(gòu)化數(shù)據(jù)

    摘要:背景當(dāng)知道要上傳的視頻資料從條變成條時(shí),我就明白,絕對(duì)不能再人工處理了。 背景 當(dāng)知道要上傳的視頻資料從20條變成100條時(shí),我就明白,絕對(duì)不能再人工處理了。他們總是想當(dāng)然的認(rèn)為,錄入一條數(shù)據(jù)需要1分鐘,那錄入20條數(shù)據(jù)就是20分鐘,錄入100條數(shù)據(jù),不就是100分鐘嗎?我有時(shí)候,真的很想問問他們,沒有考慮過人是會(huì)犯錯(cuò)的嗎?數(shù)據(jù)越多,出錯(cuò)的可能就越大;但是數(shù)據(jù)本身,又是不允許出現(xiàn)紕漏的...

    mindwind 評(píng)論0 收藏0
  • 初識(shí) CoffeeScript

    摘要:而造成一些莫名其妙的錯(cuò)誤。寫一個(gè)文件打印出編譯命令會(huì)在同級(jí)目錄下生成一個(gè)同名的文件。將包裹在了一個(gè)匿名函數(shù)當(dāng)中,并用調(diào)用,這樣使得代碼隔離,不會(huì)和外部混淆。其中的表示的就是為了方便使用,可以使用雙冒號(hào)來替代。 很早就知道這CoffeeScript一門語(yǔ)言,但是一直沒有機(jī)會(huì)系統(tǒng)的學(xué)習(xí)下,那天趁在公司沒有什么要緊的項(xiàng)目做,就根據(jù)CoffeeScript首頁(yè)的例子學(xué)了一下。 引用Coffe...

    騫諱護(hù) 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<