为什么CoffeeScript这么美?

标签: 学习 资料 | 发表时间:2011-07-28 17:36 | 作者:dulao5 Vingel
出处:http://cnodejs.org/blog

先说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首页的一段展示代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 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上推它 ;

关于作者
Web领域软件工程师
您可能也喜欢:

支持Nodejs的免费服务器简单介绍

node.js国内外资料集锦(2011.02.09更新)

Javascript里有个C:Part 3 – 深入对象

我为什么向后端工程师推荐NodeJS

请求路由模块journey的源码解读和学习心得(一)
无觅

相关 [coffeescript] 推荐:

为什么CoffeeScript这么美?

- Vingel - CNode社区
JavaScript让人又爱又恨, 因为它独特, 卓越, 而且不可或缺. 尽管如此, 要说JavaScript很美, 恐怕也有些勉强. JavaScript现在如日中天, 未来发展更是不可小觑. 但毕竟它的设计非常仓促1, 有些陷阱2, 有些晦涩3; 要不为啥Douglas Crockford的书名字叫《The Good Parts of JavaScript》呢.

3本免费CoffeeScript电子书

- Ran - 黑客志
Smooth CoffeeScript,超过200页的内容以及35个课后习题,从基础的函数式编程到面向对象,再到基于HTML5 Canvas以及WebSockets的客户端-服务器Web应用. 不需要任何编程基础,如果你已经对脚本语言有所了解,那么可以直接跳到范例章节. CoffeeScript Cookbook,这是一本多人协作的CoffeeScript书籍,集合社区之力为你提供各种CoffeeScript的便捷菜谱,如果没有找到你想要的,你也可以通过这里贡献你自己的菜谱.

CoffeeScript 還可以用來做什麼? -- Hubot

- kylexlau - Blog.XDite.net
Github 內部自用的機器人 Hubot 一直是個神秘的產品,常常看到內部員工在投影片內炫耀 Hubot 多麼的屌:. 但往往只是聞其聲,不見其蹤. 不過要是按照 Github 內部慣例,常常在員工投影片出現的東西,往往就是下一個 release 的標的. 因此大家也都是迫不及待在等 Hubot 的釋出.

[翻译]当jQuery遭遇CoffeeScript的时候——妙,不可言

- We_Get - 博客园-首页原创精华区
原作:How CoffeeScript makes jQuery more fun than ever—— Stefan Buhrmester. 转载声明:请注明原作者、翻译者以及译文链接. 译者前言:虽然对ruby不太了解,但是看到CoffeeScript诗一般的代码确实被怔住了,和jQuery之前给我的感觉是如此的相似——都是一个字,美,当jQuery遭遇到CoffeeScript时,会蹦出什么样的火花呢.

前端工具推荐-Koala,支持Less、Sass、CoffeeScript编译。

- - V2EX - 技术
越来越多的前端同学喜欢使用Less、Sass等预处理形式来编写CSS与JavaScript.这些语言确实很棒,大大提高工作效率,语法风格也很受Geek们青睐. 我也是一个Less重度使用者,之前一直用winLess编译less文件. less编译工具比较多人使用的有winless、simpless、codekit.