为什么CoffeeScript这么美?
发布于 4年前 作者 duzhigang 17782 次浏览 最后一次编辑是 3年前

先说JavaScript


JavaScript让人又爱又恨, 因为它独特, 卓越, 而且不可或缺。 尽管如此, 要说JavaScript很美, 恐怕也有些勉强。 JavaScript现在如日中天, 未来发展更是不可小觑。 但毕竟它的设计非常仓促1, 有些陷阱2, 有些晦涩3; 要不为啥Douglas Crockford的书名字叫《The Good Parts of JavaScript》呢? (题外话: 中文翻译叫"JavaScript语言精粹", 这实在是春秋笔法, 为圣者讳:D)

所以, 要是中肯的评价JavaScript: “就是不美”.

JavaScript为什么不美


我觉得amix讲的很清楚4:

  • JavaScript是函数式语言;

  • 是基于prototype实现的面向对象语言;

  • 是动态语言, 更像Lisp而非C/Java; 但却使用了C/Java的语法;

  • 名字里面叫Java, 其实和Java根本不搭边;


结论就是JavaScript的诞生是个悲剧. 它是函数式+动态语言的优秀内核, 却硬被绑上了C/Java的语法; 如同高分屏贴膜, 又如同剑宗人士非摆出气宗架势; 带有这种语法的JavaScript就如同包裹石头的璞玉5, 外壳和内涵大不相称.

所以最大的别扭, 就在语法上.

CoffeeScript为什么美


语法从Lisp系重生


CoffeeScript打 蛇打到七寸了. 它的最大功绩, 就是将JavaScript硬绑的C/Java语法抛弃了; 改为采用类似Ruby/Python的语法. Ruby/Python本来就是深受Lisp影响的, 和JavaScript算是同门师兄, 他们的语法经过了实践考验, 是更适合函数式+动态语言内核的.

Good Parts


CoffeeScript只使用了JavaScript的"Good Parts(精粹)", 抛弃了原来JavaScript晦涩的,容易出问题的那部分东西. 比如, 全局变量声明, with 啥的.

语法糖和ECMAScript


CoffeeScript提供了很多语法糖, 让代码更优雅可读. 去主页仔细看看CoffeeScript的语法清单, 就会发现边边角角到处是创新. 这让编程语言真的成了开发者的朋友, 而不是机器的朋友.

CoffeeScript还提供了一个机会, 让你现在就可以使用ECMAScript6里面的特性. 将来有个更多新特性, CoffeeScript也有机会在浏览器支持之前实现它们. 程序员面对的是CoffeeScript的优雅接口, 它是程序员和JavaScript之间的中间层, 脏活累活它都干了.

八卦一下未来


CoffeeScript构建在JavaScript上层, 这让人联想起.Net和C#/F#/VB… , 以及JVM和Java/JRuby/Scala…
在JavaScript上层做事情的, 不只CoffeeScript, 还有很多其他的. 比如lua就有通过LLVM转换成JavaScript的实现. 前段时间的JavaScript PC模拟器7也证明了这种思路的威力.
也许JavaScript就是下一个JVM, 上面会有最适用于各种场景的各种语言. 很多人盼望JavaScript成为为未来的唯一语言, 看起来这是不切实际的幻想了.

CoffeeScript首页的一段展示代码


# 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)





1: Javascript诞生记
2: Javascript的10个设计缺陷
3: JavaScript: 世界上最被误解的语言
4: CoffeeScript: The beautiful way to write JavaScript
5: JavaScript: 死或新生(4)
6: ECMAScript – WikiPedia
7: JavaScript PC emulator

我的blog: http://www.dulao5.com/ ; 原文 ; 在Twitter上推它 ;

19 回复

关于书名,台湾人译“优良部分”,是不是比较忠实客观呢?

呵呵 三减八除,js给人们的印象,大抵就算amix所总结的那四点……

@frank : 翻译成"优良部分"的确就中肯多了 .

函数式语法就优美了?Lisp整篇括号看着头疼……
明明一个}就搞定的东西 非得弄个end或者强制缩进
C和Java派系的语法风格很好啊……

我的意思很低调, 没有说函数式语法比C/Java语法优美 , 这样会引起无意义的争论;
我是说javascript内核是函数式的, 硬加上C/Java语法是"强扭的瓜不甜";
而coffee script不再是"强扭的瓜"了 .

可能也喜欢

amix 是谁?
我觉得这4点有点牵强!

确实没觉得美,感觉比较乱,"将js硬绑的C/Java语法抛弃了",可笑,又可悲的绑定了ruby、python的语法,这就美了?

语言之争永远是没有答案的争论,但是又免不了,哈哈

还是习惯看 { } , 缩进看的好累…

这么看来 coffee script 的确值得入手。

coffee 的语法大多从 Ruby, Python, Haskell 里面借鉴过来, 原本就有群众基础的
再说学习成本两者对比拿厚度一对比… 像我这样偷懒的应该不少
http://www.douban.com/group/coffeescript/
http://weibo.com/1400854834/y4AW96m5s

很多人只爱优点不爱缺点。让我怀疑对某门语言的掌握能力。

充分利用javascript 的优点,让 javascript 的 缺点 成为 自身能力 的 优势

当你们到了这个地步的时候,就可以看到某种语言没有那么多 缺点了。

当然,不排除,恨有多深,爱就有多深

公道自在人心。有些人说不好,是因为商业利益的需要,有些人是因为出名的需要,有些人纯粹就是附和。

爱一个人,就应该爱她的全部,语言也是如此,她的缺点,有可能在你的时常关怀下,会变让自己比别人更具优势

从Pascal开始的人很讨厌end。。

说实话,看着很乱啊有木有

@zero7u 语言之美,在于其表达力。从这点来讲确实很美。

你是否是习惯了类c的语法,如果是你的思维方式也应该固定了。其实从多门语言语法比较来看,coffeescript其实很清爽(Haskell,ruby其实也不错)。

语言之争,其实是思维方式的挣扎。一门语言就是一种思维方式。抱着开发的心态接受,多学点东西不好吗?

回到顶部