初探 CoffeeScript

fmms 12年前

上周末我去参加了Java开发者大会讨论了几个非常有意思的话题。有名演讲者谈到了Underscore,当时他使用的演示都是基于CoffeeScript完成的。我以前与CoffeeScript这玩意有过一面之缘,但经过他这次讲解后我打算重新再好好研究一下。如果你曾经在浏览器上使用过JavaScript 或者再服务端用过 Nodejs。那么你上手CoffeeScript就相当简单了。


请记住你根本不需要使用 CoffeeScript,如果你本身就喜欢JavaScript那么你当然可以继续使用JavaScript。而这篇文章的目的是向你们介绍CoffeeScript带来的几点好处。

CoffeeScript应用程序是以JavaScript应用的方式的运行的。在CoffeeScript程序被启动前,它被转换成对等的JavaScript应用。所以说白了,真正运行的程序实质上依然是JavaScript,只不过是利用了CoffeeScript的诸多好处而已。

几个有意思的地方:
1, 如果你对Python比较熟悉的话,那么一开始你绝对会喜欢CoffeeScript,因为CoffeeScript的语法也是使用分号结束符与大括号代码块形式的。

2, return 表达式不需要 "return" 关键字因为最后一句就代表返回的信息。虽然你也可以使用return关键字,但压根就没人这么做。

3, 当你创建一个新变量时,该变量被定义为局部变量,这就意味着我们不可能随意创建一个全局变量。所以一开始请小心地分配好全局变量。

CoffeeScript有一点我非常喜欢,就是用"or"关键字代替||符号,同理用"and"关键字代替&&

下面是一个CoffeeScript的简单范例:
value1 = true  value2 = true     if value1 and value2     alert true  else     alert false


这段代码如果翻译成JavaScript,就是:
value1 = true;  value2 = true;     if (value1 && value2) {    alert(true);  } else {    alert(false);  }


比如我想创建一个简单方法接受一个参数然后回一句"Hello":
sayHello = (name) -> alert "Hello #{name}"     sayHello 'Chad'


对应的JavaScript代码就是:
var sayHello;     sayHello = function(name) {    return alert("Hello " + name);  };     sayHello('Chad');


好了,下面让我们创建一个方法,接受两个参数,其中一个参数具有默认值:
sayHello = (name, greeting = "Hello") ->    alert "#{greeting} #{name}!"     sayHello 'Chad', 'Bonjour'  sayHello 'Chad'


看到没,我调用此方法两次,第一次我提供了第二个方法参数,而第二次我没有写第二个参数(那么第二个参数实质就是方法定义的默认值)。所以第一次返回的结果是 Bonjour Chad,而第二次是 Hello Chad

接着看看对应的 JavaScript 代码:
var sayHello;     sayHello = function(name, greeting) {    if (greeting == null) {      greeting = "Hello";    }    alert(greeting + " " + name + "!");  };     sayHello('Chad', 'Bonjour');  sayHello('Chad');


下面来看看 CoffeeScript 提供的自动 return 功能:
positiveOrNegative = (value) ->    if value > 0      "Positive"    else      "Negative"     alert positiveOrNegative 123  alert positiveOrNegative -123


对应的 JavaScript:
var positiveOrNegative;     positiveOrNegative = function(value) {    if (value > 0) {      return "Positive";    } else {      return "Negative";    }  };     alert(positiveOrNegative(123));  alert(positiveOrNegative(-123));


展望未来...
你能从这里找到有关于 CoffeeScript 技术的一切。同时现在你也能从市面上买到这两本专门讲解 CoffeeScript 的书籍。