• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kurtis
V2EX  ›  程序员

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

  •  
  •   kurtis · Aug 29, 2013 · 11161 views
    This topic created in 4817 days ago, the information mentioned may be changed or developed.
    我一直用js,包括node.js,前段js,觉得都挺好的。

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

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

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

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

    所以选COFFEE还能省键盘。。

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

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

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

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

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

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

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

    就算是很有经验的 js 程序员也常常掉这种坑里, 学习 coffee 是物有所值的
    chuangbo
    chuangbo
    Aug 30, 2013
    19
    @clowwindy 哈哈哈哈哈哈哈
    chuangbo
    chuangbo
    Aug 30, 2013
    20
    @chuangbo 顺便把 Ruby 给黑了
    yaroot
    yaroot
    Aug 30, 2013
    21
    为什么不用js: http://guide.roylang.org/en/latest/introduction.html#what-not-just-write-javascript

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

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

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

    f1 = (a1, b1, f2) ->

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

    f3 = (a3, b3) ->
    doSth31()
    doSth32()
    wb14123
    wb14123
    Aug 30, 2013
    26
    @kurtis

    第一行应该是

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

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

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

    最重要的是单行if可以不用纠结{}的问题...
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1035 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 88ms · UTC 19:02 · PVG 03:02 · LAX 11:02 · JFK 14:02
    ♥ Do have faith in what you're doing.