没有合适的资源?快使用搜索试试~ 我知道了~
CoffeeScript小书1
需积分: 0 1 下载量 181 浏览量
2022-08-04
15:49:24
上传
评论
收藏 720KB PDF 举报
温馨提示
试读
39页
还有,CoffeeScript开有一些优雅的特性,比方说列表解析、原型符号别名和类等等,能够有效的减少需要你的输入。更重要的是,JavaScript有很多不为人
资源详情
资源评论
资源推荐
CoffeeScript小书
CoffeeScirpt是什么?
CoffeeScript是一门小巧的语言,会编译为JavaScript。它的语法风格受到了Ruby和Python
影响,很多特性都借鉴于这两种语言。我们写作本书的目的在于帮助你学习CoffeeScript,
明白最佳实践是什么,以及帮助你开始创建有意思的客户端程序。这本书很小,仅仅只有五
章,但是对与CoffeeScript这门小语言来说已足够。
这本书是完全开源的,作者是Alex MacCaw
(或者 @maccman),David Griffiths、Satoshi
Murakami和 Jeremy Ashkenas也做了不小的贡献。
如果你有任何勘误和建议,千万别吝啬到本书的GitHub page
发个ticket。或许你们还对我
的另外一本书JavaScript Web Applications by O’Reilly
感兴趣,我在该书中对富JavaScript
应用以及如何把状态转移到客户端进行了探索。
好了,开始我们的CoffeeScript探索之旅吧。为什么CoffeeScript要比原生的JavaScript好?
首先,能够少写代码——CoffeeScript非常简洁,充分地利用空格。以我的经验来看,比起
纯JavaScript的话,它能减少三分之一到一半的代码量。还有,CoffeeScript开有一些优雅的
特性,比方说列表解析、原型符号别名和类等等,能够有效的减少需要你的输入。
更重要的是,JavaScript有很多不为人知的 秘密
,这些秘密往往让无经验的开发者摔跤。
CoffeeScript有原则地选择了一些JavaScript的特性,巧妙地避开了这些不足,解决了该语言
的怪癖。
CoffeeScript不是JavaScript的超集,因此尽管你可以在CoffeeScript中的使用外部的
JavaScript类库,但是如果你在没有转化之前而直接编译当前的JavaScript的话,会出现语法
错误。编译器会把CoffeeScript代码转化为相对于的JavaScript,这样在运行时就不需要解释
了。
首先澄清一些误解。由于处理运行时错误需要JavaScript相关的知识,要写CoffeeScript就得
了解JavaScript。但是话说回来,运行时错误通常比较明显,并且到目前位置,我没觉得从
JavaScript映射到CoffeeSCript会有什么问题。第二个问题是我经常听到CoffeeScript相关的
话题是速度。即,CoffScript编译后的JavaScript运行起来相比与之等价的纯JavaScript代码
要慢。但实际情况证明并不是问题。CoffeeScript看起来与徒手写的JavaScript代码运行速度
相当,甚至更快。
CoffeeScript的劣势是什么?是的,在你和JavaScript之间介多了编译这一步。CoffeeScript
也在尝试尽力通过产生优雅的可读性强的JavaScript,以及在服务器端集成自动编译来弥补
这个问题。另外一个缺陷是,作为一个新的语言,事实上现阶段社区也还比较小,想找个懂
这门语言的合伙人会花费你的大量你的时间。当然,CoffeeScript发展迅猛,相关的IRC列
表也是人才济济,如果你有什么问题的话,都会得到迅速的解答。
CoffeeScript的用途并不仅限于浏览器,把它用在JavaScript实现的服务端也非常不错,比方
说在 Node.js
上。还有,CoffeeScript越来越广泛,有更多的集成,比方说它已经是Rails3.1
的标配。现在正是进入CoffeeScript学习的时机。你现在为学习这门语言付出的时间在以后
会以为你节约大量的时间作为回报的。
CoffeeScript小书
初始化安装
一种尝试这个类库最简单的方式就是直接在浏览器中使用它,访问http://coffeescript.org
,
点击Try CoffeeScript标签。这个网站使用浏览器版的CoffeeScript编译器,把在左边面板任意
输入的CoffeeScript代码编译为JavaScriprt后显示在右边的面板中。
你也可以使用coffee2js
项目把JavaScript转变为CoffeeScirpt。这在把JavaScript项目迁移到
CoffeeScript上时尤其有用。
实际上,你自己都可以使用基于浏览器的CoffeeScirpt编译器,只需要在页面中包含这个脚
本,使用正确类型(type)的标标签记CoffeeScript脚本即可。
<script src="http://jashkenas.github.com/coffee-script/extras/
coffee-script.js" type="text/javascript" charset="utf-8"></script>
<script type="text/coffeescript">
# Some CoffeeScript
</script>
显然,在生产环境中,由于会减慢客户端的运行,所以没人愿意在运行时解释执行
CoffeeScript。作为替代,CoffeeScript提供了一个Node.js
版的编译器来对CoffeeScript文件
进行预处理。
要安装该编译器,首先必须保证你已经有了稳定可用的Node.js和npm(Node程序包管理工
具)。然后你就可以使用npm来安装CoffeeScirpt了:
npm install -g coffee-script
这同时还为你提供了一个coffee的可执行二进制程序,如果不用任何命令行参数而直接运
行该程序,它会给你一个CoffeeScript的命令行,这个命令行你可以用来快速的运行一些
CoffeeScript语句。要预处理文件的话,使用--compile参数:
coffee --compile my-script.coffee
如果没有指定--output参数,CoffeeScript会直接将编译后的代码写入到一个同名的
JavaScript文件中,本例中就是my-script.js。已存在该文件的话会被复写掉,因此要当
心你的JavaScript文件被覆盖。使用--help参数可以看到一个完整的可用命令行参数列表。
就如你在之前看到的一样,CoffeeScirpt文件的默认扩展名是.coffee,除去其他原因之
外,能让像TextMate
这样的编译器能够辨认出文件中包含的是什么语言的代码从而是用相对
应的高亮也是其中之一。TextMate并不包含对CoffeeScript的支持,但是你可以安装这个包
来提供支持。
编译看起来既不方便又很无聊。没办法,它就是这样。我们将会学习通过自动编译的方法来
解决这个问题,不过首先我们先学习一下这门语言的语法。
CoffeeScript小书
CoffeeScript语法
首先,在开始本章之前,我还想重申下尽管很多时候CoffeeScript的语法与JavaScript相似,
但是它并不是JavaScript的超集,因此,例如function和var这类JavaScript关键字并不允
许在CoffeeScript中使用。如果你正在编写CoffeeScript文件,里面必须完全是纯
CoffeeScript代码,你不能把这两种语言揉到一起。
为什么CoffeeScript不是超集?阻止其成为超集最直接的原因是在CoffeeScript程序中空格是
有意义的。而且,既然已经这么决定了,开发团队也帮你一干到底,以精简的名字代替
JavaScript的一些关键字和特性,还为避免很多常见的bug而努力。
让我极度兴奋的是,从元的角度上来说,CoffeeScript的解释器实际上就是由CoffeeScript写
成的。这看起来似乎解决了先有鸡还是先有蛋的悖论!
好了,让我们从最基本的工作开始。CoffeeScript去掉了分号,它会在编译时为你自动添
加。分号在JavaScript社区中引起了大量的争论,以及背后的一些解释器怪异的行为
。总
之,CoffeeScript为了帮你解决这个问题,简单地从语法上的移除了分号,然后在幕后更具
需要添加。
注释格式与Ruby的一致,以一个哈希字符开头。
# A comment
也支持多行注释,而且还会把多行注释添加到生成的JavaScript中。使用三个哈希字符包裹
即可。
###
A multiline comment, perhaps a LICENSE.
###
正如我简单的提过,CoffeeScript对空格是敏感的。实际说来,就是你可以使用制表符来替
换花括号({})。这受到了Python语法的影响,而且还能确保你的脚本有一个清晰的格式,
否则连编译都通不过。
变量与作用域
CoffeeScript修复了JavaScript中一个最让人头疼的问题——全局变量。在JavaScript中,一
不小心的话,就很容易在定义变量时遗漏var关键字导致产生全局变量。CoffeeScript通过
简单的剔除全局变量来解决这个问题。在背后,CoffeeScript使用一个匿名函数把所有脚本
都包裹起来,将其限定在局部作用域中,并且为所有的变量赋值前自动添加var。比如,下
面是在CoffeeScript中简单的定义一个变量:
myVariable = "test"
注意示例代码右上角的深灰色小方块。单击它,代码就会在CoffeeScript和编译后的
JavaScript之间来回切换。这是在页面加载是输出的,所以你放心,编译结果是准确的。
如你所见的那样,变量赋值被限定在局部作用域中,不小心创建全局变量是不可能的。
CoffeeScript还更进了一步,让覆盖一个高一级的变量也很困难。这大量的减少了程序员会
在JavaScript中犯的常见的错误。
CoffeeScript小书
剩余38页未读,继续阅读
曹将
- 粉丝: 20
- 资源: 309
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0