- 定价:¥99.00
- 校园优惠价:¥89.10 (90折) (马上了解)
- 评分:
(已有232条评价)
- 促销活动:
- 此商品暂时缺货(可留下联系方式,到货将第一时间通知您)
基本信息
- 原书名:Programming Ruby,Second Edition
- 原出版社: Pragmatic Programmer, LLC.
- 作者: (美)托马斯(Thomas,D.) 弗沃尔(Fowler,C.) 亨特(Hunt,A.)
- 译者: 孙勇 姚延栋 张海峰
- 出版社:电子工业出版社
- ISBN:9787121038150
- 上架时间:2007-3-22
- 出版日期:2007 年3月
- 开本:16开
- 页码:830
- 版次:2-1
- 所属分类:计算机 > 软件与程序设计 > 综合 > 高级程序语言设计
编辑推荐
全球公认Ruby权威入门参考经典 。
灵活,优雅,巧妙,快捷。
让编程成为你的直觉,让开发成为你的乐趣。
你准备好步入动态语言大时代了吗?
内容简介
计算机书籍
Ruby是一种跨平台、面向对象的动态类型编程语言。Ruby体现了表达的一致性和简单性,它不仅是一门编程语言,更是表达想法的一种简练方式。它不仅受到广大程序员的欢迎,无数的软件大师亦为其倾倒。Programming Ruby是关于Ruby语言的一本权威著作,也被称为PickAxe Book(镐头书,由封面上的工具得名)。本书是它的第2版,其中包括超过200页的新内容,以及对原有内容的修订,涵盖了Ruby 1.8中新的和改进的特性以及标准库模块。它不仅是您学习Ruby语言及其丰富特性的一本优秀教程,也可以作为日常编程时类和模块的参考手册。.
本书适合各种程度的Ruby程序员,无论新手还是老兵,都会从中得到巨大的帮助。...
作译者
目录
第2版序 xvii
前言 xiv
路线图 xxxv
第1部分 Ruby面面观 1
第1章 入门 3
1.1 安装Ruby 3
1.2 运行Ruby 5
1.3 Ruby文档:RDoc和ri 8
第2章 Ruby.new 11
2.1 Ruby是一门面向对象语言 11
2.2 Ruby的一些基本知识 13
2.3 数组和散列表 16
2.4 控制结构 18
2.5 正则表达式 19
2.6 Block和迭代器 21
2.7 读/写文件 23
2.8 更高更远 24
第3章 类、对象和变量 25
3.1 继承和消息 27
译者序
借此机会,我们还要感谢许多人。
首先要感谢博文视点公司引进此书,并将如此重要的一部书交托给我们来翻译,希望能幸不辱命。也要感谢本书的两位编辑方舟和陈元玉,没有二位认真、辛苦的工作,本书不可能有现在的翻译质量。我们也从他们的技术和文字校订中学到了很多。..
另外译者也要相互感谢一下。在本书翻译的四个月期间,姚延栋刚做了父亲,张海峰也是家有幼子,并开始了新的职业征途,但两位都竭力保证了翻译的进度和质量。孙勇则不辞辛苦地对全书进行了统稿。当然,一定要感谢家人对我们的宽容和理解。
由于译者对Ruby语言也是新学,水平有限,难免在译稿中存有这样那样的错误。如果您有技术或文字方面的问题,欢迎致信progruby.cn@gmail.com,我们会尽力帮您解答。...
译 者
2006年12月于北京
前言
当Andy和我写第1版的时候,我们不得不介绍Ruby的背景和吸引力。其中我们写道:“当发现Ruby时,我们意识到找到了一直在寻找的东西。和我们曾经用过的任何语言相比,Ruby都称得上是罕见的。你可以集中精力于解决手头上的问题而不是与编译和语言本身周旋。这就是它使你成为一位更好的程序员的方法:通过让你将时间花在为用户创建解决方案上而不是编译上。”
今天这种信念变得更强了。4年后,Ruby仍旧是我们的选择:我用它来开发客户端程序,用它来运行我们的出版商务系统,还用它来做所有使系统运行更流畅的小程序。
在这4年中,Ruby发展迅速。大量的方法被加入内建的类和模块,标准库(那些包含在Ruby发行版中的库)也有了重要发展。现在社区有了标准的文档系统(RDoc),而RubyGems也成了为打包发行Ruby代码的系统选择。
这些改变是令人激动的,但是这也使得本书第1版变得有点过时。第2版弥补了这一缺陷:像第1版一样,它是基于Ruby的最新版而编写的。
Ruby版本
Ruby Versions
本书阐述的是Ruby 1.8(特别涵盖了集成入Ruby 1.8.2的改变)。
用来写本书的Ruby版本到底是什么?让我们来问Ruby吧。
% ruby -v
ruby 1.8.2 (2004-12-30) [powerpc-darwin7.7.0]
这演示了重要的一点。你在本书中看到的大多数代码例子都在我排版本书时被实际执行过。当你看到一个程序的输出时,该输出是通过实际运行代码并将结果插入到本书而成的。
本书的变动
Changes in the Book
和第1版相比,除了更新到Ruby 1.8,你还会发现一些其他的变化。
在本书的前半部分,我新加了6章。与第1版相比,入门一章对设置和运行Ruby做了更完整的介绍。第二个新加入的单元测试章反映了Ruby爱好者对测试越来越重视。第三个新的章节涵盖了Ruby程序员使用的三个工具:用来体验Ruby的irb,用来给代码写文档的RDoc以及用来打包发布代码的RubyGems。新添的最后一章介绍了duck typing,这种编程哲学和Ruby背后的思想非常一致。
新加入的还不止这些。你还会发现线程一章大大扩展了对同步的讨论,而编写Ruby扩展一章的大部分也被重写了。关于网页编程一章讨论了一个可选的模板系统并加入了SOAP一节。语言参考一章也被大大扩展了(特别是关于block、procs、break和return新规则的部分)。
本书的后半部分对内建的类和模块进行了介绍,该部分包含的重要改动超过了250处。其中很多是方法的更新,一些是更新过时的老方法,而另一些是具有新行为的方法。你还会发现加入了许多对新模块和类的介绍。
最后,本书用了一节来介绍标准库。自Ruby 1.6以来标准库有了极大的发展,现在它的内容如此之多,以至于没有上千页篇幅根本就不可能对之进行较为详细的介绍。同时,Ruby Documentation项目正在忙于为库代码添加RDoc文档(第199页的第16章介绍了RDoc)。这意味着你可以使用Ruby发行版自带的ri工具来获得关于库模块的精确的、最新的文档。综合上述原因,我决定改变介绍库文档的风格——现在该部分是可用库的一个路线图,显示了一些代码样例并介绍了大致用法。我把底层的细节留给了RDoc。
贯穿本书,我使用页边空白中的一个小符号,就像这里的这个一样,来尽量标明1.6和1.8之间的变化。没变的一点是:在本书的正文中当谈论到作者时我仍旧使用我们一词。里面的很多词都源自第1版,我当然不想侵占Andy在那本书上的工作成果。
序言
如果你想掌握Ruby,这本书是最好的起点。如果你想运用Ruby,这本书也是案头必备。所以,如果你已经决定要走入Ruby的世界,那么这本书是必经之路,而本不需要一篇“推荐序”。
问题在于,我们为什么还要学习一种新的语言?特别是当Ruby整体上仍然是一个没有完全成熟的“小语种”的时候,为什么要把宝贵的精力投入到Ruby中?这才是我想讨论的问题。
跟很多人一样,我学习程序设计是从Basic语言开始的。然而在初步了解了程序设计的基本概念之后,我便迅速地转向了C语言,并且在上面下了一番苦功夫。是C语言帮助我逐步理解了计算机系统以及算法、数据结构等基础知识,从而迈入程序设计的大门之中的。C语言出色地实现了真实计算机系统的抽象,从而表现出极佳的适应性和强大的系统操控能力。直到今天,我仍认为认真理解和实践C语言是深入理解计算机系统的捷径。然而,当我尝试着用C语言来干点实事的时候,立刻发现一些问题:C的抽象机制过于简单,容易犯错,开发效率低下,质量难以稳定。这时,有一位老师向我介绍了Visual Basic,他盛赞VB是“最高级的开发语言”,代表未来的发展方向。正好当时有一个学校的项目摆在我面前,我几乎没有学习,凭着自己那点Quick Basic的底子,借助在线帮助,迅速地将项目完成,并且获得了好评。
通过这些初级的实践,我体会到VB在开发应用程序方面所具有的惊人的高效率,进而意识到,C与VB是两类设计目标完全不同的语言。以C语言为代表的系统编程语言的优势在于能够充分发挥机器的性能,而像VB这样的语言的优势则是充分提高人的效率。事实上,执行性能与开发效率是软件开发中的一对矛盾,所有的程序设计语言都必须面对这个矛盾,作出自己的选择。
在当时,大多数新语言的选择是上下通吃。它们一方面提供了丰富多彩的高级抽象,另一方面又提供了强有力的底层操作能力,希望由此实现高性能与高效率的统一。C++、Java、C#和Delphi都是走的这条路线,甚至VB从5.0开始也强化了底层操作机制,并提供了编译模型,不落人后。
我当时选择了C++。对于熟悉C语言的我来说,这是一个自然而然的选择。深入学习C++是一个漫长而艰苦的过程,不但要理解伴随面向对象和泛型而来的大量概念,牢记各种奇怪的语法规则,还要了解实践应用中大量存在的陷阱,掌握一系列“模式”、“惯用法”和“条例”。在克服这种种困难的过程中,我对程序设计的认识确实得到了强有力的提升,但是C++真的实现了执行性能和开发效率的双丰收了吗?很遗憾,答案是“否”。我自己的体会是,使用C++要花费大量精力来进行试探性设计,还可能要投入巨大精力来消除代码缺陷,因此开发效率不高。一些权威的调查显示,在新项目的执行中,C++的开发效率甚至低于C,这不得不发人深思。C++提供了大量的语言机制,又存在一些陷阱,想要实现良好的运行性能,就必须遵守一系列清规戒律,这就带来了思想上的不自由,其结果往往是效率的低下。
随后流行的Java和C#等语言,有效地消除了C++中存在的一些陷阱和缺陷,并且提供了很好的基础设施和开发环境,大大提高了开发效率。但是它们都设定了严整的结构和规则,进行严格的编译期检查,强调规范、纪律和计划。这些语言的拥护者们骨子里都认为,构造大规模软件是一个严肃的工程,必须施加强有力的约束和规范,时时刻刻预防和纠正开发者可能犯下的错误。当然,这样必然会导致对开发者思维的束缚和思考效率的限制,从而导致宏观上的低效。但他们认为,这是构造大型高质量软件所必须付出的代价。
然而,世界上另外有一些人的想法完全不同。他们认为,一种“可上九天揽月,可下五洋捉鳖”的终极语言即使能够实现,也注定是低效的。既然这个世界本身就是丰富多彩的,为什么不保留编程语言的多样性,各取所需,各得其所,彼此协同合作,不亦乐乎?既然C语言在充分发挥机器性能方面已经登峰造极,那么就应该尽力创造能够充分发挥人脑效能的程序设计语言。当人的效率充分提高的时候,所有的问题都会迎刃而解,或者至少大为简化。
1998年,我读到一本薄薄的小书,叫做《Perl入门》。这本书介绍了一种完全陌生的语言,不但看上去稀奇古怪,而且骨子里透露出来一股与C++、Java等完全不同的气质:狂放、不羁、乖张、散漫,无法无天。对于当时的我来说,这一切令人诧异,难以接受。而Perl的拥护者似乎也懒得挑战“主流意识形态”,他们自嘲地说,Perl就是骆驼,样子不好看,气味也不好闻,但就是能干活。随后进入视野的Python外表温文尔雅,简朴工整,但其实质与Perl一样,也是崇尚自由灵活,追求简单直接。伴随着Web走来的JavaScript和PHP,虽然外表上差别很大,但是总体上看,与Perl、Python一样,都是把自由放在结构之上,把人放在机器之上的语言。人们称它们为“动态语言”或者“脚本语言”。这些语言的出现和流行,强有力地挑战了过去20年来人们深信不疑的传统观念。传统认为编译阶段的类型检查至关重要,可是动态语言却把这类检查推迟到执行阶段的最后一刻才进行;传统认为严整的结构和严肃的开发过程是必不可少的,可是动态语言却能够用一种看上去随意自由的风格去“堆砌”系统;传统把精致的模型和多层次的设计视为最佳实践,而动态语言却往往是蛮不讲理地直来直去;传统把频繁的变化和修改视为不良过程的标志,而动态语言却将此视为自然而然的工作方式;传统认为必须在机器性能与人的效率之间取得折中,动态语言却偏执地强调人的效率,而把机器性能这档子事情抛到九霄云外。动态语言离经叛道,却又大获成功,不由分说地把人们好不容易搭建起来的那个严谨的、精致的圣殿冲击得摇摇欲坠。人们怀着复杂的心情观察着动态语言的发展,猜度着它的方向和影响。
这时候我发现了Ruby。
很多转向Ruby的人,在谈论这种语言的时候,都提到“乐趣”这个字眼,我也不例外。使用Ruby编程,你会体验到一种难以名状的趣味,这种感觉,就好像是突然掌握了十倍于从前的力量,同时又挣脱了长久以来一直束缚在身上的枷锁一般。“白日放歌须纵酒,青春作伴好还乡”,当年临摹“Hello World”时的淳朴热情仿佛又回到了身上。Ruby实现了最纯粹意义上的面向对象,让Smalltalk、Perl和Lisp的灵魂在新的躯壳里高歌。相比于Python,Ruby的思想更加清晰一致,形式更加灵活;相比于Perl,Ruby更简单质朴,绝少光怪陆离之举;相比于Smalltalk和Lisp,Ruby更富有现代感和实干气质;相比于庙堂之上的“工业语言”,Ruby自由挥洒、轻快锐利;而相比于JavaScript和PHP,Ruby从Smalltalk继承而来的深厚底蕴又大占优势。面对执行性能与开发效率的谜题,Ruby毫不犹豫地选择了开发效率,选择了对人脑的友好。Ruby的基本思想非常简单淳朴,对于基本原则的坚持非常彻底,毫不打折扣,而在具体应用中又集各家所长,实现了巧妙的平衡。从我自己的体验来讲,使用Ruby写程序,与使用C++等主流语言感觉完全不同,没有战战兢兢的规划和设计,没有紧绷的神经,没有一大堆清规戒律,有的是一种闲庭信步的悠然,有的是时不时灵光一闪的洋洋自得,有的是抓住问题要害之后猛冲猛打的快感。我的水平还不高,还不能够设计更精妙的框架和DSL(领域语言),但我相信我已经初步体会到了Ruby的乐趣。
自从这本书的第1版出版以来,Ruby的发展越来越快。最初人们用Ruby来完成一些临时的任务,然后就迅速被它迷住了,越来越多有用和有趣的东西被开发出来,越来越多有才华的人加入了Ruby的阵营,从而形成了一股潜流。这潜流在2003年以后就已经出现了,只是还没有引起外部世界的注意。然而自2005年以后,潜流变成了潮流,越来越多的人被卷进来。整个社群围绕着Ruby的质朴与自由,创造了大量的珍宝(gems)。有人用200行Ruby代码写了一个飞快的全文搜索引擎,有人把(X)HTML的解析变成了CSS Selector的有趣复用,有人用13行Ruby代码完成了一个P2P文件共享程序,有人把Google引以为豪的MapReduce算法轻巧地实现在一个小小的Ruby程序库中。当然,最为人津津乐道的还是Ruby on Rails在Web开发领域掀起的风暴。所有这一切,都令人对Ruby报以越来越热烈的掌声。
今天,Ruby已经成为世界上发展最快的程序设计语言之一,一个充满热情和创造力的社群围绕着它,开展着种种激动人心的工作。在这里没有什么豪言壮语,但是所有的工作都在扎扎实实地推进,人们被自己内心的力量驱动着,而这种力量来自于Ruby质朴和自由的乐趣,它是近于纯粹的。
我深深地知道,Ruby今天还不是“主流”,其前景究竟如何,也不是没有争论。在今天这个时代,选择技术路线是一件关乎生计和名利的事情,是不纯粹也不能纯粹的事情。在各种场合,年轻的或是年长的程序员们头头是道地分析着IT大局,掰着指头计算着技术的“钱”途,这些都无可厚非,甚至非常必要。但是,作为一个把程序设计当成自己的事业,或者至少是职业的人,总应该在自己的内心中留下那么一小片空间,在那里抛开一切功利,回归质朴,追求纯粹的编程的乐趣。如果你跟我一样,希望体会这样一种内心的乐趣,我热情地邀请你翻开这本书,加入Ruby社群。也请你相信,当越来越多的人为着自己的乐趣而共同努力的时候,我们就能创造历史。
孟 岩
《程序员》杂志技术主编
2006年12月于北京
推荐序二