如今,越来越多的预处理语言在开发阶段代替了传统的Web三大语言,分别是jade/hbs对应html,Sass/Less对应css,TypeScript/CoffeeScript对应JavaScript,当然,实际上能够对号入座的远不止以上列出的,以上列出的应该算是有点名气的。
但凡是革新的东西应该都有它的优势所在,CoffeeScript也如此,这门语言的目的就是针对JavaScript的臃肿,毕竟JavaScript问世的时候不没有想到会有今天的成绩,然而JavaScript在TOIBE排行到了前所未有的高度,当下JavaScript开发成为Web领域最急缺的技术人才。CoffeeScript也因JavaScript受关注的同时步入大家的视野。下面聊聊用了CofffeeScript做几个项目后的真实体会,仅仅是体会。
简洁
但凡是看过CoffeeScript官网的那几段简短的例子后,谁都想试一试,我也如此,官网http://coffeescript.org/,以下是官网例子
# Assignment:
number = 42
opposite = true
# Conditions:
number = -42 if opposite
# Functions:
square = (x) -> x * x
# Arrays:
list = [1, 2, 3, 4, 5]
# Objects:
math =
root: Math.sqrt
square: square
cube: (x) -> x * square x
# Splats:
race = (winner, runners...) ->
print winner, runners
# Existence:
alert "I knew it!" if elvis?
# Array comprehensions:
cubes = (math.cube num for num in list)
编译后
var cubes, list, math, num, number, opposite, race, square,
slice = [].slice;
number = 42;
opposite = true;
if (opposite) {
number = -42;
}
square = function(x) {
return x * x;
};
list = [1, 2, 3, 4, 5];
math = {
root: Math.sqrt,
square: square,
cube: function(x) {
return x * square(x);
}
};
race = function() {
var runners, winner;
winner = arguments[0], runners = 2 <= arguments.length ? slice.call(arguments, 1) : [];
return print(winner, runners);
};
if (typeof elvis !== "undefined" && elvis !== null) {
alert("I knew it!");
}
cubes = (function() {
var i, len, results;
results = [];
for (i = 0, len = list.length; i < len; i++) {
num = list[i];
results.push(math.cube(num));
}
return results;
})();
是不是有点心动?的确是很简洁,简洁的前提是牺牲一堆结束符,if没有花括号,function没有花括号,于是在你复制大段代码的时候需要尤其小心缩进对不对?我用WebStorm,这个号称最牛逼的前端编辑器在复制大段CoffeeScript代码的时候,仍会有缩进不准确的问题的,因为确实这不怪WebStorm,而是确实不好判断
原代码
a = (num1, num2)->
num1 + num2
你在后面复制代码
num1 * num2
会有两种结果,要么是
a = (num1, num2)->
num1 + num2
num1 * num2
或者是
a = (num1, num2)->
num1 + num2
num1 * num2
于是IDE会根据光标的位置判断要不要自动缩进,以要绝对小心
生态圈
有时候,要找一些解决例子,大部分网上贴的各种代码都是JavaScript格式的,比如你要搜一些插件的例子用法的代码,结果发现人家贴的是JavaScript格式的,于是你只好照着人家写好的例子代码再一步一步改成CoffeeScript格式的,这个非常耗费时间。用CoffeeScript的目的是为了简洁,减少编码时间,结果却适得其反,所有外部来源的代码你都要去转换。截至目前,我还没发现有哪几个是直接贴的CoffeeScript代码,积累不够
以前写的代码不能复用
如果你有大量的JavaScript项目经验,那么你之前所有的JavaScript代码要复用到你的CoffeeScript项目中来,就需要一条条去翻译它,这个过程一点实际意义都没有,还浪费时间,想想都要后怕。
IDE支持不好
我用的是WebStorm,这个IDE写JavaScript的时候,没得说,绝对是神器,然而你再用它写CoffeeScript的时候,你会发现很多地方不尽人意。所以我认为即使JavaScript在臃肿,但配合这些牛逼的IDE也可以非常方便编码。比如有一个功能我在写CoffeeScript的时候不敢用,那就是自动格式化代码,CoffeeScript是靠缩进定界的,万一IDE傻缺给缩进乱了那你的程序基本被毁了。JavaScript因为有花括号做定界符,所以不用担心代码格式化会导致程序被破坏。