https://www.zhihu.com/question/22804057/answer/22695297
链接:https://www.zhihu.com/question/22804057/answer/35918525
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
CoffeeScript is a little language that compiles into JavaScript. Underneath that awkward Java-esque patina, JavaScript has always had a gorgeous heart. CoffeeScript is an attempt to expose the good parts of JavaScript in a simple way.
很容易就能感受到为什么 CoffeeScript 的作者会创造出这样一门语言. 因为他认为 JavaScript 的代码风格, i.e., 花括号的 C 系风格很诡异. 但这个其实就跟我认为 Python 的风格很诡异是一个道理, 大家习惯的东西不一样罢了.
至于 good parts 和 bad parts. 其实如果真的觉得有什么 bad parts, 不用就是了, 更何况实际上我认为很多时候,,, 有些人 (Douglas) 推崇的代码风格有些 over-strict.
而 TypeScript 的核心是 scalable, 如果经常在 TypeScript 社区混, 会发现他们也很强调工具性, 即详细的接口信息, 这也是静态类型在类型安全之外的好处. 其实到这里就应该清楚, 这两门语言本身设计的目标就是不同的. CoffeeScript 只是换了种语言风格, 加上了一些语法糖, 而 TypeScript 是创造了一个适用于 JavaScript 的静态类型系统.
所以如果你和我一样, 对 Python 风格没有格外的好感, 又熟悉 JavaScript, 那么即使不考虑静态类型也应该选 TypeScript, 毕竟是 JavaScript 的超集, 上手容易. 如果又正好是开发 web app 等代码量相对较大, 模块较多, 或者是多人协作的场景, 那 TypeScript 绝对会让你难以回到原生 JavaScript.
如果确实喜欢 Python 的风格, 也没有打算写大中型 web app, 那或许 CoffeeScript 也是不错的选择.
// 参考: 6 年 web app 开发经验.视觉上清晰的代码,不一定是执行效率最高的的代码;运行效率高的代码,则未必易于编写和阅读。比较一下 array.forEach 和 for 循环就可以发现这一点。
Coffescript 本身非常简洁,编程时视觉上非常舒服,代码清晰有效。这也是为什么 ES6 和 Swift 都有借鉴 Coffee 的地方。
Coffee 编译出来的 JS 代码可读性差,但是那可都是 JS 最佳实践的编程方式:性能最好,但是最啰嗦。
所以就看你自己的选择了。 GitHub 内部都要求新的 JS 项目都用 Coffee 写呢。
总体来说,视觉上和逻辑上的一致性是未来语言的方向,花括号,分号,甚至函数参数的括号,大部分都是给机器“看”的,不是给人看的。对人友好才是一个语言发展的方向。
作者:沈嵘
链接:https://www.zhihu.com/question/22323967/answer/27578711
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在网页应用的开发方面,CoffeeScript曾经为广大程序员提供了很好的帮助。然而,微软公司推出的TypeScript正在超越CoffeeScript成为大家的首选。
作为一个在2009年出现的语言,CoffeeScript目前已经十分成熟。它给为用户提供了很多的语法糖以及基于类的继承,却又保证了尽量简洁的语法。而且,其流行程度为团队之间的高效交流提供保证。然而,CoffeeScript也存在一些很难解决的问题。Heap的软件工程师Jiawei Li表示,CoffeeScript至少存在三个方面的缺点。首先,CoffeeScript中的变量初始化和重新赋值很容易出现混淆。由于变量不需要声明,在内层函数新定义的变量可能和已有的外部变量重名,造成程序执行混乱。其次,CoffeeScript中强大的?操作符使得加大了阅读代码的难度。使用?来代替null/undefined的确可以简化代码,但编程人员却使得阅读代码变得困难。最后,CoffeeScript模糊的语法定义使得编译后程序的行为无法掌控。以foo bar and hello world为例,其编译后的结果就可以是foo(bar) && hello(world)或者foo(bar && hello(world))。
Jiawei表示,企业目前对相关编程语言的核心关注点主要集中在两个方面——代码的易读性和易于快速开发。代码易读保证了调试工作可以高效进行;易于开速开发则保证了产品的发布时间。CoffeeScript的缺点正好刺到了企业的痛点。因此,TypeScript一经推出便迅速崛起。
TypeScript的优点包括:支持可选的静态类型和基于类的面向对象编程、内置的类型注解保证了代码编译时的正确性、版本更新速度很快以及支持在第三方JavaScript中增加类型等。尽管TypeScript还存在不成熟的地方(如与ES6的兼容性方面),其特性很好的保证了大规模JavaScript应用开发的效率。未来,TypeScript必然会有进一步更好的表现。
最后,Jiawei也指出了一些TypeScript有待改进的地方。TypeScript还欠缺模式匹配和隐式转换等语言特性。而且,针对变量的取值为null或者undefined的情况,TypeScript还不能很好的进行处理。JiaWei建议,可以添加更多的类型机制来解决该问题。其中包括使用Options来决定是否允许变量为null/undefined、使用Trys来声明事情成功或失败以及使用Futures或Promises来声明异步操作成功或失败等。
感谢徐川对本文的审校。
浙公网安备 33010602011771号