初探 CoffeeScript

junwong 发布于 2012/04/18 16:45
阅读 4K+
收藏 22
上周末我去参加了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 的书籍。
加载中
1
老李_beijing
老李_beijing
非常优美啊,比python强百倍
柯激情
柯激情
回复 @老李_beijing : def多好啊,self就是this的另外写法而已
老李_beijing
老李_beijing
@柯激情 缩进不需要冒号支持,类木有self,不用写def等,缩进语言不和python比和谁比呢?
柯激情
柯激情
python躺着也中枪?,这鸡爪的玩意还跟python说风格优美?
苍耳先生
苍耳先生
看到 -> 就想踹作者一脚
rockjava
rockjava
哪优美?我咋没看出来呢,还出现了“->”看着就不舒服
下一页
0
无趣
无趣
有啥特色了,就语法精简了一下吗?
junwong
junwong
具体我也不清楚 只是把文章翻译出来而已
0
lichaplin
lichaplin
已经会javascript的话而且时间多余的话可以学一下。
0
7月
7月
天杀的,文言文版javascript
悲剧的码农先生
悲剧的码农先生
有道理
血战长空
有创意的描述
tidezyc
tidezyc
+1
internetafei
internetafei
精辟
0
imcj
imcj

引用来自“老李_beijing”的答案

非常优美啊,比python强百倍
哦?具体?
0
lixb
lixb

引用来自“林天宁”的答案

天杀的,文言文版javascript
精辟
0
xesam
xesam

引用来自“无趣”的答案

有啥特色了,就语法精简了一下吗?
添加了很多python,ruby的语法,并且算是部分增强javascript。
0
卖豆浆不卖油条
卖豆浆不卖油条

引用来自“lixb”的答案

引用来自“林天宁”的答案

天杀的,文言文版javascript
精辟

0
Liuxd
Liuxd
又一个玩具吗?我玩具多得玩不过来了都...
0
阿昭
阿昭

其实是js的格式简化,估计作者给js的各种大小括号搞烦了

不过确实很不错的说

返回顶部
顶部