zoukankan      html  css  js  c++  java
  • [译]从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.

  • 相关阅读:
    greenlet和gevent模块的区别?
    Python整型int、浮点float常用方法
    jquery的相关应用
    mongoDB在java上面的应用
    SpringAOP的两种实现方式
    svn 服务器搭建 (Linux)
    maven的两种打包方式
    MongoDB 安装与配置
    springmvc拦截器配置
    Linux下安装mysql
  • 原文地址:https://www.cnblogs.com/ziyunfei/p/2709564.html
Copyright © 2011-2022 走看看