以下是由 Paul Miller 发布的客座文章。您也可以提交客座文章,只需发送一个 pull request 即可。
CoffeeScript 已经存在了一段时间,现在被许多开发者和工具使用。
但是,为什么有人要从 CoffeeScript 切换到它的分支 LiveScript 呢?以下列出了十个理由
LiveScript 支持标识符中的连字符,并将其转换为驼峰式命名法,以保持与 JavaScript 代码风格的一致性。
document.query-selector-all
等价于,并且会编译成
document.querySelectorAll
对于数字,它们支持下划线和后缀
64_000km
将简单地编译成
64000
|>
管道操作符它与函数而不是原型上的方法一起使用,这使得可以轻松地为链编写自己的模块化函数。例如
[1 2 3] |> map (* 2) |> sum #=> 10
prelude.ls - 基于 Haskell 的 Prelude 模块。ECMAScript 5 数组扩展很好,但还不够。与管道操作符配合使用效果极佳。
这允许编写无样板代码的纯函数式代码
people |> map (.name) |> filter (in visitors)
而不是
people.map((man) -> man.name).filter((name) -> name in visitors)
const x = 10
它们在编译时进行检查,以减少错误。工作方式类似于 ES6 的 const
,但它编译成 var
,因为 const
目前还没有得到引擎的大力支持。
=
始终在当前作用域中声明变量,使用 :=
重新声明外部作用域变量,从而减少 bug。
x = 1 y = 1 do -> x = 2 y := 2 x #=> 1 y #=> 2
unique pulls .length
将执行 unique
,然后获取结果的 .length
属性,这与 CoffeeScript 不同,CoffeeScript 需要括号。因此它等价于
unique(pulls).length
这允许无括号链式调用
unique node or not empty node
编译成
unique(node) || !empty(node)
[x ** y for x in [10, 20] for y in [2, 3]]
将创建
[100, 1000, 400, 8000]
正如预期的那样。
(a, b, c) --> a * b * c
而不是
(a) -> (b) -> (c) -> a * b * c
对函数式缓存非常有用。
异步回调扁平化语法
error <- fs.write-file path, data alert error
“单词数组” Ruby 习语
<[one two three]>
对比
['one', 'two', 'three']
如果您已经编写了一些 CoffeeScript 代码,则可以参考 转换指南。
如果您决定使用 LiveScript 编写 Web 应用程序,我建议您查看 Brunch,它“只需运行”并干净地支持 LiveScript。
对函数式编程感兴趣?查看 使用 LiveScript 和 prelude.ls 进行 JavaScript 函数式编程。
有关 LiveScript 和 prelude.ls 的更多信息,关注 @gkzahariev。
由 Disqus 提供支持的评论