Nodejs 为什么CoffeeScript这么美?
Nodejs 为什么CoffeeScript这么美?
<h3>先说JavaScript</h3> <br/>JavaScript让人又爱又恨, 因为它独特, 卓越, 而且不可或缺。 尽管如此, 要说<strong>JavaScript很美</strong>, 恐怕也有些勉强。 JavaScript现在如日中天, 未来发展更是不可小觑。 但毕竟它的设计非常仓促<sup><a href="#fn1">1</a></sup>, 有些陷阱<sup><a href="#fn2">2</a></sup>, 有些晦涩<sup><a href="#fn3">3</a></sup>; 要不为啥Douglas Crockford的书名字叫《The Good Parts of JavaScript》呢? (<em>题外话: 中文翻译叫"JavaScript语言精粹", 这实在是春秋笔法, 为圣者讳:D</em>) <br/> <br/>所以, 要是中肯的评价JavaScript: “就是不美”. <br/><h3>JavaScript为什么不美</h3> <br/>我觉得amix讲的很清楚<sup><a href="#fn4">4</a></sup>: <br/><ul> <br/> <li>JavaScript是函数式语言;</li> <br/> <li>是基于prototype实现的面向对象语言;</li> <br/> <li>是动态语言, 更像Lisp而非C/Java; <strong>但却使用了C/Java的语法</strong>;</li> <br/> <li>名字里面叫Java, 其实和Java根本不搭边;</li> <br/></ul> <br/>结论就是JavaScript的诞生是个悲剧. 它是函数式+动态语言的优秀内核, 却硬被绑上了C/Java的语法; 如同高分屏贴膜, 又如同剑宗人士非摆出气宗架势; 带有这种语法的JavaScript就如同包裹石头的璞玉<sup><a href="#fn5">5</a></sup>, 外壳和内涵大不相称. <br/> <br/>所以最大的别扭, 就在语法上. <br/><h3>CoffeeScript为什么美</h3> <br/><h4>语法从Lisp系重生</h4> <br/><a href=“http://jashkenas.github.com/coffee-script/”>CoffeeScript</a>打 蛇打到七寸了. 它的最大功绩, 就是将JavaScript硬绑的C/Java语法抛弃了; 改为采用类似Ruby/Python的语法. Ruby/Python本来就是深受Lisp影响的, 和JavaScript算是同门师兄, 他们的语法经过了实践考验, 是更适合函数式+动态语言内核的. <br/><h4>Good Parts</h4> <br/>CoffeeScript只使用了JavaScript的"Good Parts(精粹)", 抛弃了原来JavaScript晦涩的,容易出问题的那部分东西. 比如, 全局变量声明, with 啥的. <br/><h4>语法糖和ECMAScript</h4> <br/>CoffeeScript提供了很多语法糖, 让代码更优雅可读. 去<a href=“http://jashkenas.github.com/coffee-script/”>主页</a>仔细看看CoffeeScript的语法清单, 就会发现边边角角到处是创新. 这让编程语言真的成了开发者的朋友, 而不是机器的朋友. <br/> <br/>CoffeeScript还提供了一个机会, 让你现在就可以使用ECMAScript<sup><a href="#fn6">6</a></sup>里面的特性. 将来有个更多新特性, CoffeeScript也有机会在浏览器支持之前实现它们. 程序员面对的是CoffeeScript的优雅接口, 它是程序员和JavaScript之间的中间层, 脏活累活它都干了. <br/><h3>八卦一下未来</h3> <br/>CoffeeScript构建在JavaScript上层, 这让人联想起.Net和C#/F#/VB… , 以及JVM和Java/JRuby/Scala… <br/>在JavaScript上层做事情的, 不只CoffeeScript, 还有很多其他的. 比如lua就有通过LLVM转换成JavaScript的实现. 前段时间的JavaScript PC模拟器<sup><a href="#fn7">7</a></sup>也证明了这种思路的威力. <br/>也许JavaScript就是下一个JVM, 上面会有最适用于各种场景的各种语言. 很多人盼望JavaScript成为为未来的唯一语言, 看起来这是不切实际的幻想了. <br/><h3>CoffeeScript首页的一段展示代码</h3> <br/><pre escaped=“true” lang=“coffeescript” line=“1”># Assignment: <br/>number = 42 <br/>opposite = true <br/> <br/># Conditions: <br/>number = -42 if opposite <br/> <br/># Functions: <br/>square = (x) -> x * x <br/> <br/># Arrays: <br/>list = [1, 2, 3, 4, 5] <br/> <br/># Objects: <br/>math = <br/> root: Math.sqrt <br/> square: square <br/> cube: (x) -> x * square x <br/> <br/># Splats: <br/>race = (winner, runners…) -> <br/> print winner, runners <br/> <br/># Existence: <br/>alert “I knew it!” if elvis? <br/> <br/># Array comprehensions: <br/>cubes = (math.cube num for num in list)</pre> <br/> <br/><hr /> <br/> <br/>1: <a id=“fn1” href=“http://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html”>Javascript诞生记</a> <br/>2: <a id=“fn2” href=“http://www.ruanyifeng.com/blog/2011/06/10_design_defects_in_javascript.html”>Javascript的10个设计缺陷</a> <br/>3: <a id=“fn3” href=“http://javascript.crockford.com/zh/javascript.html”>JavaScript: 世界上最被误解的语言</a> <br/>4: <a id=“fn4” href=“http://amix.dk/blog/post/19612”>CoffeeScript: The beautiful way to write JavaScript</a> <br/>5: <a id=“fn5” href=“http://typeof.net/2011/06/javascript-dead-and-alive/4/”>JavaScript: 死或新生(4)</a> <br/>6: <a id=“fn6” href=“http://en.wikipedia.org/wiki/ECMAScript”>ECMAScript – WikiPedia</a> <br/>7: <a id=“fn7” href=“http://bellard.org/jslinux/”>JavaScript PC emulator</a> <br/> <br/>我的blog: http://www.dulao5.com/ ; <a href=“http://www.dulao5.com/note/2011/07/27/why-is-coffeescript-so-beautiful.html”>原文</a> ; <a href=“http://twitter.com/share?url=http://www.dulao5.com/note/2011/07/27/why-is-coffeescript-so-beautiful.html&via=dulao5&text=为什么CoffeeScript这么美?”>在Twitter上推它</a> ;
Node.js 为什么 CoffeeScript 那么美?
先说 JavaScript
JavaScript 让人又爱又恨。尽管它独特、卓越且不可或缺,但要说 JavaScript 很美,恐怕有些勉强。JavaScript 的设计非常仓促,存在一些陷阱和晦涩之处。因此,Douglas Crockford 在他的书中提到《The Good Parts of JavaScript》,中文译名为《JavaScript语言精粹》,这实际上是在委婉地指出 JavaScript 存在许多不好的方面。
所以,如果要客观评价 JavaScript,可以说:“就是不美”。
JavaScript 为什么不美
JavaScript 的设计结合了函数式语言和面向对象语言的特点,但使用了 C/Java 风格的语法。这种设计导致了一些别扭之处,比如:
- JavaScript 是函数式语言;
- 基于 prototype 实现的面向对象语言;
- 动态语言,更像 Lisp 而非 C/Java;
- 名字里叫 Java,其实和 Java 没有什么关系。
这些特点使得 JavaScript 的语法显得不协调,就像一块璞玉被粗糙的外壳包裹着。
CoffeeScript 为什么美
CoffeeScript 打蛇打到了七寸。它的最大优点是抛弃了 C/Java 的语法,采用了类似 Ruby 和 Python 的语法,这两种语言深受 Lisp 影响,更适合函数式 + 动态语言的内核。
语法从 Lisp 系重生
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...) ->
console.log winner, runners
# Existence:
alert "I knew it!" if elvis?
# Array comprehensions:
cubes = (math.cube num for num in list)
Good Parts
CoffeeScript 只使用了 JavaScript 的“Good Parts”,抛弃了晦涩的部分,如全局变量声明和 with
关键字。
语法糖和 ECMAScript
CoffeeScript 提供了许多语法糖,使代码更优雅可读。例如,箭头函数、解构赋值、数组推导等特性,让编程语言真正成为了开发者的工具,而不是机器的工具。
此外,CoffeeScript 还提供了对 ECMAScript 6 特性的支持,让你可以提前使用一些未来的新特性。
总结
CoffeeScript 构建在 JavaScript 之上,提供了一种更优雅的方式来编写 JavaScript 代码。通过简化语法、去掉不必要的复杂性,CoffeeScript 成为了一个更好的选择。虽然 JavaScript 仍然具有重要地位,但 CoffeeScript 通过其优雅的语法,为开发者提供了一个更友好的接口。
希望这段内容能帮助你更好地理解为什么 CoffeeScript 如此之美。
关于书名,台湾人译“优良部分”,是不是比较忠实客观呢?
呵呵 三减八除,js给人们的印象,大抵就算amix所总结的那四点……
[@frank](/user/frank) : 翻译成"优良部分"的确就中肯多了 .
函数式语法就优美了?Lisp整篇括号看着头疼…… <br/>明明一个}就搞定的东西 非得弄个end或者强制缩进 <br/>C和Java派系的语法风格很好啊……
我的意思很低调, 没有说函数式语法比C/Java语法优美 , 这样会引起无意义的争论; <br/>我是说javascript内核是函数式的, 硬加上C/Java语法是"强扭的瓜不甜"; <br/>而coffee script不再是"强扭的瓜"了 .
可能也喜欢
amix 是谁? <br/>我觉得这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。。
说实话,看着很乱啊有木有
你是否是习惯了类c的语法,如果是你的思维方式也应该固定了。其实从多门语言语法比较来看,coffeescript其实很清爽(Haskell,ruby其实也不错)。
语言之争,其实是思维方式的挣扎。一门语言就是一种思维方式。抱着开发的心态接受,多学点东西不好吗?
CoffeeScript之所以被认为比JavaScript更美,主要是因为它解决了JavaScript的一些设计缺陷,并以一种更简洁、更易读的方式编写代码。
1. 语法简化
CoffeeScript的语法更接近于自然语言,例如:
# JavaScript
number = 42;
opposite = true;
if (opposite) {
number = -42;
}
// CoffeeScript
number = 42
opposite = true
number = -42 if opposite
2. 函数定义简化
CoffeeScript中的函数定义更加直观:
# JavaScript
var square = function(x) {
return x * x;
};
// CoffeeScript
square = (x) -> x * x
3. 对象和数组的定义更简洁
CoffeeScript在处理对象和数组时更加简洁:
# JavaScript
var math = {
root: Math.sqrt,
square: function(x) {
return x * x;
},
cube: function(x) {
return x * this.square(x);
}
};
// CoffeeScript
math =
root: Math.sqrt
square: (x) -> x * x
cube: (x) -> x * square x
4. 存在性检查
CoffeeScript提供了简洁的存在性检查:
# JavaScript
if (elvis !== undefined) {
alert("I knew it!");
}
// CoffeeScript
alert "I knew it!" if elvis?
这些改进使得CoffeeScript代码更具可读性和简洁性,这也是它被认为是“美丽”的原因之一。