`

为什么CoffeeScript这么美?

 
阅读更多

 

先说JavaScript


JavaScript让人又爱又恨, 因为它独特, 卓越, 而且不可或缺。 尽管如此, 要说JavaScript很美, 恐怕也有些勉强。 JavaScript现在如日中天, 未来发展更是不可小觑。 但毕竟它的设计非常仓促, 有些陷阱, 有些晦涩; 要不为啥Douglas Crockford的书名字叫《The Good Parts of JavaScript》呢? (题外话: 中文翻译叫"JavaScript语言精粹", 这实在是春秋笔法, 为圣者讳:D

所以, 要是中肯的评价JavaScript: “就是不美”. 

JavaScript为什么不美


我觉得amix讲的很清楚


  • JavaScript是函数式语言;

  • 是基于prototype实现的面向对象语言;

  • 是动态语言, 更像Lisp而非C/Java; 但却使用了C/Java的语法;

  • 名字里面叫Java, 其实和Java根本不搭边;


结论就是JavaScript的诞生是个悲剧. 它是函数式+动态语言的优秀内核, 却硬被绑上了C/Java的语法; 如同高分屏贴膜, 又如同剑宗人士非摆出气宗架势; 带有这种语法的JavaScript就如同包裹石头的璞玉, 外壳和内涵大不相称. 

所以最大的别扭, 就在语法上. 

CoffeeScript为什么美


语法从Lisp系重生


CoffeeScript打 蛇打到七寸了. 它的最大功绩, 就是将JavaScript硬绑的C/Java语法抛弃了; 改为采用类似Ruby/Python的语法. Ruby/Python本来就是深受Lisp影响的, 和JavaScript算是同门师兄, 他们的语法经过了实践考验, 是更适合函数式+动态语言内核的. 

Good Parts


CoffeeScript只使用了JavaScript的"Good Parts(精粹)", 抛弃了原来JavaScript晦涩的,容易出问题的那部分东西. 比如, 全局变量声明, with 啥的. 

语法糖和ECMAScript


CoffeeScript提供了很多语法糖, 让代码更优雅可读. 去主页仔细看看CoffeeScript的语法清单, 就会发现边边角角到处是创新. 这让编程语言真的成了开发者的朋友, 而不是机器的朋友. 

CoffeeScript还提供了一个机会, 让你现在就可以使用ECMAScript里面的特性. 将来有个更多新特性, CoffeeScript也有机会在浏览器支持之前实现它们. 程序员面对的是CoffeeScript的优雅接口, 它是程序员和JavaScript之间的中间层, 脏活累活它都干了. 

八卦一下未来


CoffeeScript构建在JavaScript上层, 这让人联想起.Net和C#/F#/VB… , 以及JVM和Java/JRuby/Scala… 
在JavaScript上层做事情的, 不只CoffeeScript, 还有很多其他的. 比如lua就有通过LLVM转换成JavaScript的实现. 前段时间的JavaScript PC模拟器也证明了这种思路的威力. 
也许JavaScript就是下一个JVM, 上面会有最适用于各种场景的各种语言. 很多人盼望JavaScript成为为未来的唯一语言, 看起来这是不切实际的幻想了. 

CoffeeScript首页的一段展示代码


# Assignment:

number   = 42

opposite = true


# Conditions:

number = -42 if opposite


# Functions:

square = (x) -> x * x


# Arrays:

list = [1, 2, 3, 4, 5]


# Objects:

math =

  root:   Math.sqrt

  square: square

  cube:   (x) -> x * square x


# Splats:

race = (winner, runners...) ->

  print winner, runners


# Existence:

alert "I knew it!" if elvis?


# Array comprehensions:

cubes = (math.cube num for num in list)
分享到:
评论

相关推荐

    当jQuery遭遇CoffeeScript的时候 使用分享

    虽然对ruby不太了解,但是看到CoffeeScript诗一般的代码确实被怔住了,和jQuery之前给我的感觉是如此的相似——都是一个字,美,当jQuery遭遇到CoffeeScript时,会蹦出什么样的火花呢?

    americano-script:美式脚本

    随着 CoffeeScript 的许多优秀特性在 ES6 中落地,但是 ES6 特性进入到 coffeescript 的路径非常保守(而且许多 ES5 特性仍然没有在 coffeescript 中咳咳命名函数咳嗽),AmericanoScript 将弥补差距,因为它只是...

    jQuery咖啡杯标签云效果

    这个效果模拟了咖啡杯中热气腾腾的雾气在空气中缓慢飘散的情景,为网页的标签展示添加了一丝动态美。这个效果主要依赖于jQuery库,一个广泛应用于Web开发的JavaScript库,因其简洁的API和强大的功能而广受欢迎。 ...

    ( 《Web开发敏捷之道应用Rails进行敏捷Web开发(原书第4版)》.((美)Sam Ruby)

    书中会涉及Sass和CoffeeScript的使用,它们是CSS和JavaScript的预处理器,能提高代码的可维护性和组织性。此外,还会讲解如何利用Bootstrap或jQuery等库提升用户体验。 最后,本书也会探讨部署和运维的相关知识,...

    grunt-gtfd:生成文档的 grunt.js 任务

    但它是用 CoffeeScript 编写的,我找不到测试......等等。 所以我从一个类似的想法开始。 特征 静态:您可以按原样压缩和共享或提供结果。 简单:就像Docco 目录:不是问题 用法 您可能应该看看 。 精美的文档 ...

    棱镜:使用各种格式的所有“文档颜色”及其各自的颜色标签创建漂亮的画板调色板

    | | | | | | | (以前为ShareableColorPalette ) 用各种颜色的Document Colors及其相应的颜色标签创建... 使用Coffeescript和爱从头开始重建。 用法 安装插件。 将颜色添加到“文档颜色”中。 运行命令[ctrl cmd

    网络游戏-一种Geart3D游戏引擎.zip

    此外,它还支持CoffeeScript和TypeScript等语言,满足不同开发者的需求。 在网络游戏方面,Geart3D提供了网络通信模块,使得游戏能够实现实时的多人在线互动。通过WebSocket或HTTP等协议,服务器可以与客户端进行...

    energy-art:您的消费数据的精美可视化

    通过运行`grunt build`,开发者可以将源代码转换为适合部署的格式,而`grunt serve`命令则启动一个本地服务器,用于实时预览项目改动,这在前端开发中非常常见,便于快速迭代和调试。 此外,项目中提到的"测验"部分...

    impressive-markdown:使用 Markdown 生成精美的 impress.js 演示文稿

    令人印象深刻的降价 使用 markdown 生成精美的 impress.js 演示文稿。 这是一个使用示例: I love making fancy slides ~ Don't you just love images: ...将整个事情转换为简单的可执行文件 添加到 NPM

    MandelbrotSets

    - 绘制函数:遍历Canvas的每个像素,将其坐标转换为复数,调用迭代函数,根据结果决定像素的颜色。 - 事件监听器:可能包括鼠标移动事件,用于动态改变放大或缩小显示区域。 - 页面加载后执行:初始化Canvas,计算并...

    schedules-backend:使用 Sails 构建的时间表的后端服务器

    feat/ 或 fix/ 前缀的新分支提交并将更改推送到您的存储库创建一个新的拉取请求我们将接受以下请求: 不要破坏任何东西有据可查和评论用纯 JavaScript 编写(抱歉没有 Coffeescript)贡献者蒂莫西·肯德尔、伊恩·...

    mocha-cucumber:摩卡Cucumber——两种美味搭配在一起!

    摩卡Cucumber摩卡Cucumber是UI模块,让你描述你的功能使用鉴于/时/然后!安装您应该首先安装 mocha: npm install -g mocha然后在全局或项目中安装 mocha-cucumber: npm install -g mocha-cucumber用法写下你的特征...

    senaite.lims:SENAITE元软件包

    SENAITE是什么意思? 是美丽的三角形,油绿色至绿色的黑色,几乎具有钻石的硬度。 尽管用复杂的配方描述了该晶体,但它仍然具有清晰而笔直的形状。 因此,它很好地反映了LIMS的复杂性,同时提供了现代,直观和友好...

    americano-cozy:[已弃用] 基于 Americano 的 Cozy 应用程序助手

    不要再考虑为 Cozy 包含 JugglingDB 及其配置,Americano Cozy 会为您完成这项工作: americano = require ' americano-cozy ' module . exports = americano . getModel ' Task ' , done : Boolean ...

    mikoto:控制我公寓空调的机器人

    美琴 mikoto 是一个建立在框架上的聊天机器人。 它最初由生成,并配置为部署在,让您尽快启动和运行。 此自述文件旨在帮助您入门。 一定要更新完善,谈谈你自己的实例,如何使用和部署,他有什么功能等等! 在本地...

    hubot-skype:使用SkypeKit用Ruby编写的用于Hubot的Skype适配器

    请注意,Skype Developer SDK的费用为5美元(一次性费用)。 适用于Hubot的适配器是开源的,并且是MIT许可的,但Skype SDK不是。 有关更多信息,请参考Skype SDK许可证。 达尼洛( 所做的关于使用hubot-skype...

    beautiful-docs:阅读文档的一种好方法

    在文档旁边生成静态页面(例如:轻松地为您的项目创建演示文稿网站) 内置搜索引擎,简洁美观的默认主题 打印样式表 支持 易于定制(例如:针对组织) 支持带有索引页的多个清单 请查看作为示例,或查看作为源。 ...

    yummly-api:Yummly API 的 Node.js 模块

    美味的 Node.js API 包装 Yummly API 的 Node.js 模块。...用法模块尚未发布到 npm,因此暂时只需克隆 repo 即可获取代码。 运行npm install以安装依赖项。 公共方法是 search() 和 recipe(),有关返回数据的示例,请...

    boilerplate-gif

    用于样板的动画 gif 制作器这从样板程序中制作出甜美的 gif 用法:按住 Shift 键并在它周围拖动。 Cmd+C / Ctrl+C(复制) 将其保存到文件中。 在 macos pbpaste > mything.json 。 npm install -g boilerplate-gif ...

    backbone.tastycollections:轻量级分页和过滤器集合,与 Backbone.js 和 Tastypie 配合得很好

    骨干.美味集合 轻量级分页和过滤器集合,与 Backbone.js 和 Tastypie 配合得很好 安装 AMD define(['backbone.tastycollections', 'backbone'], function (Backbone) { var FilteredCollection = Backbone....

Global site tag (gtag.js) - Google Analytics