最近看到好多用CoffeeScript写的东西,忍不住吐槽一下 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
mytharcher
V2EX    Javascript

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

  •  
  •   mytharcher 2012-12-20 12:12:59 +08:00 7973 次点击
    这是一个创建于 4679 天前的主题,其中的信息可能已经有所发展或是发生改变。
    21 条回复    1970-01-01 08:00:00 +08:00
    shellex
        1
    shellex  
       2012-12-20 12:38:39 +08:00   2
    > 比如仍然不能通过一个关键字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
        2
    Alex_L  
       2012-12-20 12:52:46 +08:00 via iPad
    ->是来自Haskell
    这篇文章暴露了楼主对Ruby, Haskell, Python完全不了解,对自己批判的CoffeeScript几乎停留在不了解状态(Coffee语法看下来不用半小时吧?),对自己熟悉的Javascript也不怎么了解:JS因为语法糟糕被吐槽很多好吧。难道你只用过JS跟PHP?
    ispinfx
        3
    ispinfx  
       2012-12-20 12:55:24 +08:00
    @Alex_L +1
    vfasky
        4
    vfasky  
       2012-12-20 12:57:31 +08:00
    作为一个前端,我表示,用了 CoffeeScript , 就不想再用 js
    loddit
        5
    loddit  
       2012-12-20 13:03:11 +08:00
    是 Python and Ruby程序员,不知道是不是因为这个喜欢 CoffeeScript .

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

    用 haml,slim,jade 等缩近模板时,也有这种感觉
    0bit
        6
    0bit  
       2012-12-20 13:06:57 +08:00
    coffee有:
    方便的遍历;
    省掉一堆{};
    ?= ;
    and or 比 && || 的可读性要好;
    自动创建局部变量;
    最主要的就是写出来的代码整洁易懂,这在充满了绑定与回调的js上,是很重要的,我觉得。
    BOYPT
        7
    BOYPT  
       2012-12-20 13:16:53 +08:00
    基本上没触及任何js的缺陷和coffeescript对其的封装,然后“JS本身的写法已经很舒服很流畅”,好吧,呵呵。
    Kymair
        8
    Kymair  
       2012-12-20 13:37:16 +08:00   1
    推荐阅读一下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
        9
    mytharcher  
    OP
       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
        10
    BOYPT  
       2012-12-20 14:24:37 +08:00
    @mytharcher 制定规范和语法限制,虽然可能是一样的目的,不过这是不同的approch。

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

    js在v2ex似乎是月经贴了,总是总重复重复这些争议。
    Kymair
        11
    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
        12
    Alex_L  
       2012-12-20 14:40:55 +08:00 via iPad
    @mytharcher JS中switch语句的写法继承自C,是陷阱还是缺陷在C语言中就饱受争议,能实现更复杂的控制结构同时也更易出错。

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

    如果不是浏览器的限制,JS的事实标准地位和Eich设计JS时的仓促,我们本能在浏览器里使用更好的语言的。
    shellex
        13
    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
        14
    shellex  
       2012-12-20 14:59:07 +08:00
    @mytharcher 还有你提到愿意使用Array.forEach,我没记错的话,IE7浏览器不兼容这东西。
    jackyz
        15
    jackyz  
       2012-12-20 15:35:34 +08:00   1
    月经帖+1,syntax sugar 这个事情见仁见智,我个人的感觉是 Javascript the bad parts 也必有其存在的价值,喜欢用 plain old Javascript 也未尝不可呀。

    Why I Prefer Javascript Over CoffeeScript

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

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

    PS: @Livid 不知道是不是新加的cmd + enter功能原因,在回复框里进行回复时,搜狗拼音假死的频率略高。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2805 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 00:28 PVG 08:28 LAX 17:28 JFK 20:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86