[譯]從CoffeeScript轉到LiveScript的10個理由


原文:http://gkz.github.com/LiveScript/blog/ten-reasons-to-switch-from-coffeescript.html


CoffeeScript 問世已經有一段時間了,現在已經被很多開發者們使用,不少工具也依賴它.

那么為什么我們還要從CoffeeScript轉移到它的分支,LiveScript呢?這里有10個原因:

  1. 提高可讀性

    LiveScript支持在標識符中使用連字符,編譯時可以把帶連字符的標識符轉換成駝峰形式,保持與JavaScript代碼風格的統一.

    document.query-selector-all

    會被編譯為

    document.querySelectorAll

    數字直接量的話,還支持下划線分割和附帶后綴單位:

    64_000km

    會被編譯為

    64000
  2. |> 管道運算符

    這是從F#學來的語法,val |> func 相當於 func(val).在連接多個科里化的函數時非常有用

    [1 2 3] |> map (* 2) |> sum #=> 12
  3. 標准庫

    prelude.ls - 基於Haskell的Prelude模塊,提供了很多操作數組的函數,配合管道運算符效果更好.

  4. 部分應用運算符和成員訪問

    這樣可以寫出純粹的函數式代碼且不需要模板:

    people |> map (.name) |> filter (invisitors)

    相當於

    people.map((man) -> man.name).filter((name) -> nameinvisitors)
  5. 常量

    const x = 10

    會在編譯時禁止常量的重新賦值,這樣會有更少的錯誤.類似於ES6中的const,但最終會編譯成var,因為目前還有不少引擎不支持const.

  6. 改進變量作用域

    = 總是會在當前作用域內新建一個局部變量,使用 := 才是給外層作用域的變量重新賦值,這樣可以減少bug.

    x = 1
    y = 1
    do ->
    x = 2 #新建一個局部變量x
    y := 2 #修改外部函數的變量y
    x #=> 1
    y #=> 2
  7. 改進運算符關聯性

    unique pulls .length

    會優先運行unique函數,然后在返回的結果上獲取length屬性,而在CoffeeScript,必須明確的添加括號:

    unique(pulls).length

    多個表達式連接起來也不需要小括號

    unique node or not empty node

    會編譯為

    unique(node) || !empty(node)
  8. 真正的, ECMAScript 6 / Python / Haskell風格的列表推導式

    [x ** y for x in [10, 20] for y in [2, 3]]

    會產生一個數組

    [100, 1000, 400, 8000]

    譯者注:ES6中,把這種語法稱之為數組推導式( Array Comprehension ),Firefox已經支持該語法,寫法是這樣的:

    [Math.pow(x,y) for(x of [10, 20]) for(y of [2, 3])]

    這應該才是ES6的正確語法

  9. 科里化函數

    (a, b, c) --> a * b * c

    代替了

    (a) -> (b) -> (c) -> a * b * c

    用法是這樣的

    times = (x, y) --> x * y
    times 2, 3       #=> 6 (參數足夠時是一個普通的函數,返回計算后的結果)
    double = times 2 #參數不夠時,會返回一個部分應用函數.相當於JavaScript中的double = times.bind(null,2)
    double 5 #=> 10 (相當於times 2 5)
  10. 更多語法

    扁平化的異步回調語法:

    error <- fs.write-file path, data
    alert error

    等同於

    fs.writeFile(path, data,function(error){alert(error)});

    單詞數組:

    <[one two three]>

    等同於

    ['one', 'two', 'three']

 

如果你已經寫過一些CoffeeScript代碼了,那么這里有一個轉換指南.

如果你打算用LiveScript寫一個web應用程序,我推薦你看一下Brunch,它支持LiveScript.

對函數式編程感興趣?那可以看看Functional Programming in JavaScript using LiveScript and prelude.ls.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM