V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kurtis
V2EX  ›  程序员

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

  •  
  •   kurtis · 2013-08-29 09:57:55 +08:00 · 9590 次点击
    这是一个创建于 4100 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我一直用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
    chrisyipw  
       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而已,增加学习成本。
    lidashuang
        49
    lidashuang  
       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   ·   实用小工具   ·   2992 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 14:45 · PVG 22:45 · LAX 06:45 · JFK 09:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.