最近看到好多用CoffeeScript写的东西,忍不住吐槽一下

2012-12-20 12:12:59 +08:00
 mytharcher
http://mytharcher.github.com/posts/disgusting-coffeescript.html
7632 次点击
所在节点    JavaScript
21 条回复
shellex
2012-12-20 12:38:39 +08:00
> 比如仍然不能通过一个关键字class就定义一个JS的“类”。
CoffeeScript就是用class定义「类」的 http://coffeescript.org/#classes

> 但关键的问题在于,这种新的语法并没有提供任何新的功能
提升了编码体验

Javascript这种一周就搞出来的语言设计也算舒服?我看CoffeeScript做得没什么不对的。

for n in AnArray 迭代显然比 for (var i = 0; i < AnArray.length; i+=1) 可读性好

而CoffeeScript中switch..when条件分支是跳出整个switch体的,明显改进了switch..case然后每个case后都加break的诡异设计
Alex_L
2012-12-20 12:52:46 +08:00
->是来自Haskell
这篇文章暴露了楼主对Ruby, Haskell, Python完全不了解,对自己批判的CoffeeScript几乎停留在不了解状态(Coffee语法看下来不用半小时吧?),对自己熟悉的JavaScript也不怎么了解:JS因为语法糟糕被吐槽很多好吧。难道你只用过JS跟PHP?
ispinfx
2012-12-20 12:55:24 +08:00
@Alex_L +1
vfasky
2012-12-20 12:57:31 +08:00
作为一个前端,我表示,用了 CoffeeScript , 就不想再用 js
loddit
2012-12-20 13:03:11 +08:00
是 Python and Ruby程序员,不知道是不是因为这个喜欢 CoffeeScript .

但是我经常想,js 要是一开始就是这样改多好啊

用 haml,slim,jade 等缩近模板时,也有这种感觉
0bit
2012-12-20 13:06:57 +08:00
coffee有:
方便的遍历;
省掉一堆{};
?= ;
and or 比 && || 的可读性要好;
自动创建局部变量;
最主要的就是写出来的代码整洁易懂,这在充满了绑定与回调的js上,是很重要的,我觉得。
BOYPT
2012-12-20 13:16:53 +08:00
基本上没触及任何js的缺陷和coffeescript对其的封装,然后“JS本身的写法已经很舒服很流畅”,好吧,呵呵。
Kymair
2012-12-20 13:37:16 +08:00
推荐阅读一下Coders at Work这本书,看看Douglas Crockford, Brendan Eich的章节。
JavaScript的确有很多非常糟糕的地方,但是由于它有一些类似Lisp的最核心的精华,所以现在才能被发展成现在的样子。“JS本身的写法已经很舒服很流畅”是许多的程序员多年努力的成果,甚至JS的作者Brendan Eich, Douglas Crockford这样的大神最开始也不知道可以这样。

我觉得CoffeeScript正是Crockford所追求的一个足够好的"An subset of JavaScript", 只包含"JavaScript: The Good Parts".

你也许不喜欢CoffeeScript的特定语法,但是抬头看看吧,Google有Dart(http://www.dartlang.org/), Microsoft有TypeScript(http://www.typescriptlang.org/), 再比如ClojureScript.. 为什么他们要做这些?
mytharcher
2012-12-20 14:16:49 +08:00
@shellex 不好意思,定义类这个问题我孤陋了。不过我看了下这块的翻译,实际上使用的仍是JS里有缺陷的方式来定义“类”,所以我说的这个不是根本上的改进。

for in anArray的需求我现在更倾向于写成anArray.forEach(fn)

switch/case中用when这种结构如何做到两个条件合并到一个处理流程的写法?

@Alex_L 不好意思,我的确对Ruby, Haskell, Python都不了解,看过一些Ruby,其中的确有很多可取之处,比如module混入机制,比如语言化的表达方式,这些我都很赞赏。但对CS实在没看多久就看不下去了,当然,我现在硬着头皮看完了。我其实想吐槽的核心问题还是这在写代码当中需要增加一个翻译机制,而这点导致我想起来就浑身不自在。有github的repo里就会提供coffee的源码和一个翻译后的JS,我始终认为经过机器生成的东西不应该放在源码仓库里,但我也理解作者不翻译就有我这样的人根本不用的想法。我觉得我这的确是一种洁癖。

@loddit 可惜JS一开始不是这样,所以JS才只是JS。看到HAML/JADE的时候几乎是跟coffee一样难受。

@BOYPT 这是因为JS写的很多,大多数缺陷都通过制定规范来规避掉了。

@Kymair 感谢推荐,但是如果不是所有浏览器都普遍支持,那么对于前端的意义就不是那么大。
BOYPT
2012-12-20 14:24:37 +08:00
@mytharcher 制定规范和语法限制,虽然可能是一样的目的,不过这是不同的approch。

http://www.v2ex.com/t/54041

js在v2ex似乎是月经贴了,总是总重复重复这些争议。
Kymair
2012-12-20 14:33:41 +08:00
@mytharcher 我们的计算机也不能直接运行C, Java, Python, Ruby语言。JS是Web的universal runtime, 最终都会compile成JS. 浏览器为啥没有普遍支持? CoffeeScript compile出来的JS已经是异常干净的了
Alex_L
2012-12-20 14:40:55 +08:00
@mytharcher JS中switch语句的写法继承自C,是陷阱还是缺陷在C语言中就饱受争议,能实现更复杂的控制结构同时也更易出错。

我觉得你可能只是觉得有转译这么一层东西不太舒服,就像当年汇编程序员看不惯用编译器的高级语言,编译型语言程序员看不惯用解释器的动态语言,C程序员至今认为真男人就要手动管理内存。

如果不是浏览器的限制,JS的事实标准地位和Eich设计JS时的仓促,我们本能在浏览器里使用更好的语言的。
shellex
2012-12-20 14:56:08 +08:00
@mytharcher 因为js中本没有类,coffee只是一个翻译,怎么可能做出本来js中就不存在的东西来?

github的guide里是说不要在repo里面保存编译后的js。

when Cond1, Cond2 这样不是很自然么 看看官网 http://coffeescript.org/#switch

@Kymair 的意思是Javascript有如此多缺陷,以至于大家要做新的轮子,问题就在于浏览器的支持。而Coffee的好处是在享受现代化语法的同时,还能保证发布版本在浏览器可用,我认为这是Coffee最大的优势,也是我用它的理由。

一方面,你说Coffee没有从实质上增强Js(当然这不对)或者替换Js,另一方面,又要保证浏览器通用性,这两点本身就是矛盾的。在这方面,Coffee是最好的选择。
shellex
2012-12-20 14:59:07 +08:00
@mytharcher 还有你提到愿意使用Array.forEach,我没记错的话,IE7浏览器不兼容这东西。
jackyz
2012-12-20 15:35:34 +08:00
月经帖+1,syntax sugar 这个事情见仁见智,我个人的感觉是 javascript the bad parts 也必有其存在的价值,喜欢用 plain old javascript 也未尝不可呀。

Why I Prefer JavaScript Over CoffeeScript

楼主可以去找原文来读,或者看我收的快照。 http://cliclip.com/#clip/7/521
mytharcher
2012-12-20 16:30:21 +08:00
@shellex 好吧,这么我理解你最终的选择也是一种折中。

PS:when那里是我看漏了。forEach我还是知道要针对IE67补全ES5扩展的。
shiren1118
2012-12-20 17:03:50 +08:00
各位都没看它的类吗?原型继承是永远的痛啊,看base2去吧
ianva
2012-12-20 23:08:38 +08:00
从function 到 -> 的变化可不仅仅是写法简单了
insraq
2012-12-20 23:33:34 +08:00
个人倾向于Coffeescript,不能低估syntax suger带来的productivity的提升。
jiyinyiyong
2012-12-20 23:46:25 +08:00
插入广告.. 貌似我也重复了.. http://coffee-js.github.com/coffeescript.cn/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/55382

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX