小毛的胡思乱想

凡走过,必留痕迹.

Hello,coffeescript

| Comments

周五下午的时候,花了大半个小时在团队里边介绍了CoffeeScript,使用的是Sam Stephenson的ppt。 这里再把相关的内容总结一下。

Why CoffeeScript

CoffeeScript关注的是Good Part Of Javascript,可以和javascript无缝结合。 CoffeeScript借鉴了ruby的语法,参考python的缩进规范,让代码更为简洁,规范性更强,适合以javascript为主的应用,如Node应用。 以我的经历(弄个html5 canvas+node的应用),语法入门很简单(如果熟悉ruby,简直就似曾相识),代码量可以少30%~50%,但对像Extjs这样的巨无霸UI代码,由于嵌套太深,不是很合适。

JavaScript’s Good Parts

It’s private by default.
所有编译后的代码都会在一个自执行的闭包中,所以不会渗漏出全局变量。还记得在js文件中定义的变量在外边还能访问到吧? 在coffeescript中,全局变量必须要显示指出。

No more “var” keyword.
在js中变量只有在全局或函数内有效,没有局部变量这种,而且没有声明var的话,就会变成全局的。在coffeescript中遵循了这套规则,给所有变量加上var,并在全局开头或方法开始全部声明。 这样可以减少一些粗心导致的bug。

Strict comparisons.
严格相等有了专门的语法is。对于javascript来说,相等这东西让不少初学者踩地雷,特别是对false这东西的理解。

有趣的语法

对着ppt或者coffeescript的官方指南看看就行了。我挑一些自己特别喜欢的:

  • Significant white space 空白是有意义的,纠结于编码格式规范真是扯淡的事,这下好了不用争了
  • Comprehensions 这是非常有用的语法糖
  • Classes and Inheritance 内置的类和继承,不用纠结与用什么方式实现类比较好
  • Bound functions 解决this应用的内置方案
  • Conditionals 写过ruby的童鞋就知道了,后置的if和unless语句爽呆了,对可能为undefined和null的对象调用方法也优雅许多了
  • String Syntax 多行字符串,可内嵌参数的字符串,拼接字符串的时代过去了

How to Use

  • CoffeeScript.org有一个实时编译成js的工具(页面)
  • Rails3.1已经支持CoffeeScript
  • 使用js版的编译器,并使用type为text/coffeescript的script标签,嵌入CoffeeScript代码或文件
  • 使用Node.js,可以用npm install -g coffee-script,然后使用coffee命令编译成js文件
  • 可以使用监控工具来实时编译js文件,例如使用watchr
gem install watchr
watchr project.watchr

# project.watchr
watch('src\/.*\.coffee') {|match| system "coffee --compile --output js/ src/"}

Comments