想请教一个问题,为什么CoffeeScript受欢迎? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
kurtis
V2EX    程序员

想请教一个问题,为什么CoffeeScript受欢迎?

  •  
  •   kurtis 2013-08-29 09:57:55 +08:00 10247 次点击
    这是一个创建于 4505 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我一直用js,包括node.js,前段js,觉得都挺好的。

    一直听人说,coffeeScript优雅简洁,
    于是我看了一下,的确看起来很清新,只是如此而已。
    不爽的是,这种基于“排版”的编程语言,如果多一个空格,或换行就会有完全不同的语义。

    恕我浅薄,CoffeeScript一定有什么除了“看起来”以外的优势。
    请不吝赐教。
    52 条回复    1970-01-01 08:00:00 +08:00
    ine181x
        1
    ine181x  
       2013-08-29 10:06:31 +08:00
    转换出的代码是符合Javascript的最佳实践的。另外就是语法糖。
    chuangbo
        2
    chuangbo  
       2013-08-29 10:07:19 +08:00
    官网首页不是写了么。。摒弃了 Javascript 糟粕,保留了精粹,不容易进坑。
    缩进这种问题就不需要讨论了。
    lichao
        3
    lichao  
       2013-08-29 10:10:24 +08:00
    也只是在 ruby 圈很流行,但是我看它有时候转换出来的 js 有点嗦
    akinoniku
        4
    akinoniku  
       2013-08-29 10:12:29 +08:00
    其实就是把JS好用的地方提炼出来了,再加点语法糖

    除非你很熟悉JS,不然COFFEE的执行效率大概会比手写的高,而且优雅

    但是如果你真的很熟悉JS的话,你手写JS出来的代码应该也是跟coffee编译出来的没差

    所以选COFFEE还能省键盘。。

    我觉得大概就是这样
    anson0370
        5
    anson0370  
       2013-08-29 10:25:41 +08:00
    光一个 `->` 和 `=>` 我就笑醒了……嗯 省键盘而且提高开发效率不是挺好的么

    用缩进分块的做法和 python 一样 根本不是什么问题 习惯习惯就好了
    nigelvon
        6
    nigelvon  
       2013-08-29 10:27:47 +08:00
    貌似coffee出来之前就精通js的用coffee的人很少。
    chrisyipw
        7
    crisyipw  
       2013-08-29 10:40:31 +08:00
    根据 @kurtis 的话,感觉你是把 Coffee 和 JS 给分离了(看成是不一样的语言)。

    其实你说的基本就是 Coffee 的全部了,除此之外,真没啥好说,编译的代码用 JS 也可以写出来,JS 的坑也可以靠经验填上,而且执行效率相差无几,所以就只有语法糖的问题。

    Coffee 的语法糖很甜,因为参考的是同样以语法糖很甜出名的 Ruby,相比之下 JS 就太烦人。

    我日常写项目是用 Coffee + CodeKit / uglify,编译后会有 source map,调试不成问题,所以,写起来舒服确实让我很爽。
    0bit
        8
    0bit  
       2013-08-29 10:45:49 +08:00
    Coffee 的语法糖简直是懒人的福音
    zhujinliang
        9
    zhujinliang  
       2013-08-30 08:57:43 +08:00
    我是懒得学coffee script。。。js写的很顺手了,干嘛学个别的语言结果转出来还是js。。。
    同理less,不过看起来less要比coffee有意义的多
    kurtis
        10
    kurtis  
    OP
       2013-08-30 09:13:47 +08:00
    js 里面有 可以直接 编译像LINQ 一样的语句吗? 我觉得LINQ很天马行空。
    lichao
        11
    lichao  
       2013-08-30 09:19:56 +08:00
    @kurtis 似乎是完全不相关的东西
    coolicer
        12
    coolicer  
       2013-08-30 09:20:30 +08:00
    coffee不利于团队交流,如果用那每个人都要学习,目测只有个人使用者比较多
    kurtis
        13
    kurtis  
    OP
       2013-08-30 09:24:54 +08:00
    @lichao
    我在c#里面用过linq,一开始也是觉得,完全就是不同的东西嘛!
    可是用着用着,发现其实这种混合编写,有种独特的乐趣。

    如果js有这种混合编写的功能倒是很强!
    jacobbubu
        14
    jacobbubu  
       2013-08-30 09:38:09 +08:00
    知乎上回答过类似问题。你知道,这种问题很容易挑起争论的:)
    anson0370
        15
    anson0370  
       2013-08-30 09:51:00 +08:00
    coffee 已经够好学了,为了提高生产率这点学习成本很便宜
    istef
        16
    istef  
       2013-08-30 09:58:02 +08:00
    作为懒人我还是很喜欢 coffee 滴,写个 class 就得 function(){ return {}} 实在有点儿难受。缺点是,用 coffee 可能会影响对 Javascript 本身的理解。。。
    anyway,写代码就是图个爽啊
    luikore
        17
    luikore  
       2013-08-30 10:24:45 +08:00
    用 coffee 就不会踩到下面的坑:

    ie7 最后一项多个逗号, ie8 splice, 该写 === 的地方写成了 ==, undefined 被别人覆盖了, 漏写个 var 使得变量泄漏到全局作用域...

    就算是很有经验的 js 程序员也常常掉这种坑里, 学习 coffee 是物有所值的
    clowwindy
        18
    clowwindy  
       2013-08-30 10:31:02 +08:00   2
    chuangbo
        19
    chuangbo  
       2013-08-30 10:40:59 +08:00
    @clowwindy 哈哈哈哈哈哈哈
    chuangbo
        20
    chuangbo  
       2013-08-30 10:41:22 +08:00
    @chuangbo 顺便把 Ruby 给黑了
    yaroot
        21
    yaroot  
       2013-08-30 10:52:06 +08:00
    为什么不用js: http://guide.roylang.org/en/latest/introduction.html#what-not-just-write-Javascript

    coffee只停留在语法糖阶段, 学习成本相当低的
    但如果会函数式语言的话, 更好的选择会很多: lispyscript, livescript, clojurescript, js of ocaml等等
    davepkxxx
        22
    davepkxxx  
       2013-08-30 11:20:43 +08:00
    我还是觉得调试起来稍显麻烦
    kurtis
        23
    kurtis  
    OP
       2013-08-30 16:21:26 +08:00
    我记得 teambation 用node写的。 好像他们要求程序员要会coffeescript.
    估计生产力提升效果肯定是有的,就是,我还是不能习惯强制“排版”的语言。

    顺便诚恳的问一句:如何用coffeescript 写有多重函数嵌套的程序?

    f1(a1,b1,
    fuction (a2,b2,
    function (a3,b3) {
    doSth31();
    doSth32();
    }) {
    doSth21();
    doSth22();
    })
    );
    wandou
        24
    wandou  
       2013-08-30 16:22:57 +08:00
    用过一段时间,列表解析很爽很强大,模板功能也不错。
    wb14123
        25
    wb14123  
       2013-08-30 17:43:44 +08:00
    @kurtis

    f1 = (a1, b1, f2) ->

    f2 = (a2, b2, f3) ->
    doSth21()
    doSth22()

    f3 = (a3, b3) ->
    doSth31()
    doSth32()
    wb14123
        26
    wb14123  
       2013-08-30 17:47:21 +08:00
    @kurtis

    第一行应该是

    f1 a1, b1, f2
    kfll
        27
    kfll  
       2013-08-30 19:39:30 +08:00
    - ruby 程序员终于可以开始干前端了!
    - 前端程序员终于可以不写花括号了!
    gaicitadie
        28
    gaicitadie  
       2013-09-02 16:35:42 +08:00
    一直不喜欢CoffeeScript的飘过
    zkd8907
        29
    zkd8907  
       2013-09-02 17:01:08 +08:00
    万年Javascript死忠表示什么脚本都替代不了Javascript。
    yakczh
        30
    yakczh  
       2013-09-02 17:15:35 +08:00
    不欢迎的路过
    FrankFang128
        31
    FrankFang128  
       2013-09-02 17:36:29 +08:00
    我和你的感觉一样,对coffee的语法感到迷惑。
    zenozeng
        32
    zenozeng  
       2013-09-02 23:26:45 +08:00 via Android
    @davepkxxx 可以直接 watch 或者在浏览器里引用coffeescript.js
    davepkxxx
        33
    davepkxxx  
       2013-09-03 10:10:38 +08:00
    @zenozeng 浏览器都不支持coffeescript断电调试吧。
    zenozeng
        34
    zenozeng  
       2013-09-03 10:37:43 +08:00
    @davepkxxx 有 source maps 调试应该够用了吧?
    breeswish
        35
    breeswish  
       2013-09-03 10:38:50 +08:00
    @davepkxxx 可以生成map
    fwee
        36
    fwee  
       2013-09-03 10:42:26 +08:00
    coffee要是不依赖缩进就完美了
    cin
        37
    cin  
       2013-09-03 10:46:50 +08:00
    用了一段时间coffee又默默地换回了js, 感觉js各种美:(我病了?)
    davepkxxx
        38
    davepkxxx  
       2013-09-03 10:49:30 +08:00
    @zenozeng
    @breeswish
    不是每个浏览器都支持source maps
    xieren58
        39
    xieren58  
       2013-09-03 10:58:48 +08:00
    @cin 同感~
    kurtis
        40
    kurtis  
    OP
       2013-09-03 11:09:10 +08:00
    @fwee 不依赖缩进虽然完美,但是这个语言的特点是:如果不缩进,语义完全无法确定啊。

    @davepkxxx “断电”调试 我也喜欢,还有“断电”开发,一般来说,把电脑的电源拔掉后,眼睛盯着屏幕自己心里想着程序该怎么怎么执行。
    mywjch
        41
    mywjch  
       2013-09-03 15:49:19 +08:00
    @davepkxxx chrome有coffee调试增强的插件,不过确实还是麻烦
    behappy
        42
    behappy  
       2013-09-04 10:28:07 +08:00
    正确的缩进能增强程序的可读性。
    kurtis
        43
    kurtis  
    OP
       2013-09-04 11:48:04 +08:00
    @behappy
    我同意,我写js目前都是编辑器 自动排版,自动缩进的。
    coffescript估计不行啊。
    luikore
        44
    luikore  
       2013-09-04 12:02:32 +08:00
    @kurtis 一个是手动括号+(编辑器)自动排版, 一个是手动排版+(语言)自动括号, 后者对各种编辑器的适应能力更好...
    luikore
        45
    luikore  
       2013-09-04 12:04:09 +08:00   2
    抗拒coffee的大部分理由都是: 宗教体验...
    dreampuf
        46
    dreampuf  
       2013-09-04 12:25:29 +08:00
    Coffeescript提供一层足够好的抽象,使之更多针对JS的拓展,变得可行,比如 yield (Ice-coffeescript)
    语法糖带来的表达能力是会带来编写&维护上的量变
    chloerei
        47
    chloerei  
       2013-09-04 12:43:40 +08:00
    我刚接触 CoffeeScript 的时候困惑过,不知道这样增加一层值不值得。于是我坚持了半年写 Javascript,发现确实有很多累赘的代码或容易忽视的错误,发现 CoffeeScript 真的好,现在转写 CoffeeScript 了。
    gdzdb
        48
    gdzdb  
       2013-09-04 15:48:25 +08:00
    个人对coffee无感。

    感觉就是用另外一种格式来写Javascript而已,增加学习成本。
    G2bN4dbX9J3ncp0r
        49
    G2bN4dbX9J3ncp0r  
       2013-09-04 16:46:41 +08:00
    @gdzdb 就是另外一种格式写js,coffee的官网也说了,coffee技术Javascript。我感觉增加的学习成本对以后的收益来说是可接受的
    kaifengjin
        50
    kaifengjin  
       2013-09-04 16:48:10 +08:00
    因为号称很容易学,大家都爱走捷径
    fanzeyi
        51
    fanzeyi  
       2013-09-04 22:43:41 +08:00
    @coolicer 反对一下这条.. XD
    arzusyume
        52
    arzusyume  
       2013-09-05 09:07:22 +08:00
    我觉得coffee构造OOP相对比较直观一些
    语法上比较单一至少可以强制让队友的代码规范些

    最重要的是单行if可以不用纠结{}的问题...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3312 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 11:01 PVG 19:01 LAX 03:01 JFK 06:01
    Do have faith in what you're doing.
    ubao msn 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