CoffeeScript
标签(空格分隔): Session
什么是CoffeeScript
CoffeeScript 编程语言是构建于 JavaScript 之上,它可编译成高效 JavaScript,您可以在 Web 浏览器上运行它或者将其与诸如 Node.js 一类的技术相结合用于构建服务器端应用程序。编译过程通常都很简单,生成的 JavaScript 均与许多最佳实践保持一致。
为什么要用CoffeeScript
示例代码:
pmb.requestPaymentInfo('type', function(info){
$('result').innerHTML = info.name;
});
示例中含有许多样板代码,如括号、逗号、大括号、分号,以及一些并不是真正需要的语言关键字。
而CoffeeScript 解决了 JavaScript 这些痛点。CoffeeScript:
- 提供一种比较简单的语法,减少了样板代码,诸如括号和逗号
- 使用空格作为一种组织代码块的方法
- 提供拥有表达函数的简单语法
- 提供基于类的继承(可选项,但是在进行应用程序开发时非常有用)
而在运行时,CoffeeScript将编译成简洁、高效的JavaScript,您总能清楚地看到正在编译的内容。
如何使用CoffeeScript
安装
1、首先安装node.js
2、从命令行运行 npm install –global coffee-script来安装Coffee
使用
1、创建一个名为 cup0.coffee
for i in [0..5]
console.log "Hello #{i}"
2、运行 coffee cup0.coffee
$ coffee cup0.coffee
Hello 0
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5
3、输入 coffee -c cup0.coffee,编译为js
(function() {
var i;
for (i = 0; i <= 5; i++) {
console.log("Hello " + i);
}
}).call(this);
CoffeeScript 一个优势是,即使它提供的是一种比 JavaScript 更简洁的语法,但是可以编译成非常简单、有逻辑的 JavaScript
CoffeeScript的语法
1、函数
函数通过一组可选的圆括号包裹的参数, 一个箭头, 一个函数体来定义. 一个空的函数像是这样: ->
square = (x) -> x * x
cube = (x) -> square(x) * x
编译为js
var cube, square;
square = function(x) {
return x * x;
};
cube = function(x) {
return square(x) * x;
};
2、对象和数组
CoffeeScript 中对象和数组的字面量看起来很像在 JavaScript 中的写法. 如果单个属性被写在自己的一行里, 那么逗号是可以省略的. 和 YAML 类似, 对象可以用缩进替代花括号来声明.
song = ["do", "re", "mi", "fa", "so"]
singers = {Jagger: "Rock", Elvis: "Roll"}
bitlist = [
1, 0, 1
0, 0, 1
1, 1, 0
]
kids =
brother:
name: "Max"
age: 11
sister:
name: "Ida"
age: 9
编译为js
var bitlist, kids, singers, song;
song = ["do", "re", "mi", "fa", "so"];
singers = {
Jagger: "Rock",
Elvis: "Roll"
};
bitlist = [1, 0, 1, 0, 0, 1, 1, 1, 0];
kids = {
brother: {
name: "Max",
age: 11
},
sister: {
name: "Ida",
age: 9
}
};
3、词法作用域和变量安全
CoffeeScript 编译器会考虑所有变量,保证每个变量都在词法域里适当地被定义 — 你永远不需要自己去写 var,只需要直接使用该变量即可。
4、if, else, unless 和条件赋值
表达式可以不用圆括号和花括号就写出来.就像函数和其他块级表达式那样, 多行的条件可以通过缩进来表明.另外还有一个顺手的后缀形式,在行尾使用 if or unless.
5、变参(splats)…
使用 JavaScript 的 arguments 对象是一种处理接收不定数量个参数的函数常用办法. CoffeeScript 在函数定义和调用里提供了变参(splats) … 的语法, 让不定个数的参数使用起来更愉悦一些.
6、循环和推导式
可以使用CoffeeScript将大多数的循环写成基于数组、对象或范围的推导式(comprehensions)。 推导式替代(编译为)for循环,并且可以使用可选的子句和数组索引值。 不同于for循环,数组的推导式是表达式,可以被返回和赋值。
7、一切都是表达式 (至少尽可能成为)
CoffeeScript 函数是不需要写 return 语句的, 但是也会返回最终的结果. CoffeeScript 编译器会尽可能保证语言中所有的表达式都可以被当作表达式使用. 观察一下下面的函数, return 是怎样尽可能地插入到执行的分支当中的.
8、操作符和 aliase
由于操作符 == 常常带来不准确的约束, 不容易达到效果, 而且跟其他语言当中意思不一致, CoffeeScript 会把 == 编译为 ===, 把 != 变异为 !==. 此外, is 编译我 ===, 而 isnt 编译为 !==. not 可以作为 ! 的 alias 使用.
逻辑操作方面, and 编译为 &&, 而 or 编译为 ||.在 while, if/else,switch/when的语句当中,then可以被用来分隔判断条件跟表达式, 这样就不用强制写换行或者分号了.
参考资料
1、http://coffee-script.org/
2、http://ruby-china.org/topics/4789