Ruby是一种面向对象的敏捷语言,借鉴了LISP、Smalltalk、Perl、CLU和其他语言的出色特性。在本书第1版面世后的5年内,Ruby得以日益流行。
本书采用“如何解决问题”的方式阐述Ruby编程,涵盖了以下内容:Ruby术语和基本原理;数字、字符串等低级数据类型的操作;正则表达式;国际化和Ruby消息目录;散列、数组及栈、树和图等其他数据结构的操作;I/O、文件和对象持久化;Ruby特有的OOP技术及动态编程;Tk、GTK+、Fox和Qt等Ruby图形用户界面;使用RUbY线程实现轻量级多任务:使用Ruby编写脚本和进行系统管理;使用图像文件、PDF、YAML、xML、RSS和Atom;Ruby代码的测试、调试、性能分析和打包;低级网络编程和客户/服务器交互;Rails、Nitro、Wee、IOWA等Web开发工具;使用分布式Rkuby、Rinda和Ring。书中包含400多个按主题分类的示例,每个示例都回答了“如何使用Ruby来完成”的问题。首先对要完成的任务进行了描述,并讨论技术方面的约束条件,然后循序渐进地阐述一种优秀的解决方案,并辅以说明和解释以帮助读者理解。
作者Hal Fulton以旁征博引、引人入胜而又清晰易懂的写作手法,全面而详细地阐述了.Ruby,让读者感到犹如有一位知识渊博的老师在身边,并渴望将其掌握的知识悉数传授给你。本书可作为中高级程序员深入了解Ruby以及使用它来解决实际问题的参考手册。
第1章 RUBY概述
第2章 使用字符串
第3章 使用正则表达式
第4章 RUBY的国际化
第5章 执行数值计算
第6章 符号和范围
第7章 处理时间和日期
第8章 数组、散列及其他枚举类型
第9章 高级数据结构
第10章 I/O和数据存储
第11章 RUBY的OOP与动态特性
第12章 RUBY的图形界面
第13章 RUBY中的线程
第14章 脚本编程与系统管理
第15章 RUBY和数据格式
第16章 测试和调试
第17章 代码的打包和分发
第18章 网络编程
第19章 RUBY与WEB应用程序
第20章 分布式RUBY
第21章 RUBY开发工具
第22章 RUBY社区
Hal Fulton拥有密西西比大学的两个计算机学位。在社区大学里教授计算机课程4年后,他因工作需要(主要受聘于奥斯汀的IBM)搬到了德克萨斯州奥斯汀。他拥有15年使用各种UNIx系统(包括AIx、Solaris和Linux)的经验。他首次接触Ruby是在1999年,从2001年开始他就着手编写本书的第l版,这是第二本用英语编写的Ruby图书。他参加了六次Ruby大会,并在其中的四次中发表过演讲,包括在德国卡尔斯鲁厄召开的首届欧洲Ruby大会。目前,他在德克萨斯奥斯汀的Broadwing Communications工作,主要从事大型数据仓库和电信应用方面的工作。他每天都在使用C++和Oracle,当然还有Ruby。
Hal仍活跃在Ruby邮件列表和IRC频道中,且正在开发几个Ruby项目。他是ACM和IEEE计算机协会的成员。在生活中,他喜欢音乐、阅读、写作、艺术和摄影。他还是Mars社团的成员和天文爱好者,平生的愿望是进行一次太空旅行。
道可道,非常道。
——老子,《道德经》
本书名为The Ruby Way(《Ruby之道》),这需要解释一下。
作者的目标是尽力使本书符合Ruby哲学,这也是其他撰稿人的目标。成功的荣誉应与他们分享,但对任何错误的指责将由作者承担。
当然,作者无法准确地阐述Ruby的精神,这主要应由松本行弘来说,但即使是他也难以用语言来描述。
总之,这是一本书,而Ruby之道是Ruby语言创始人和整个Ruby社区管辖的领域,一本书难以描述清楚。
虽然如此,作者还是尝试在前言中诠释不可言传的Ruby之道,聪明的学生不应将其视为权威。
这是第2版,很多内容没变,也有很多内容有了变化。我们保留了前言的大部分内容,但读者应阅读下一节,其中对修订和新增的内容做了总结。
第2版简介
万物都在变化,Ruby也不例外。作者于2006年8月撰写该前言时,本书第1版已出版将近5年,是该进行修订了。
本版进行了大量的修订并新增了大量的内容。原来第4章的内容被划分到6章中,其中的两章(“符号和范围”与“Ruby的国际化”)是新增的,其他4章也新增了示例和说明。有关正则表达式的内容更多了,不仅介绍了经典正则表达式,还介绍了正则表达式引擎Oniguruma。
第8章和第9章原来是一章,但新增内容后篇幅太多,因此将其分为两章。
同样,添加新内容后,将原来的第9章分为第18~20章,删除了原来的附录以留出篇幅介绍更多的内容。
另外,还新增了如下几章:
• 第15章介绍XML、RSS、图像文件和PDF文件的创建等。
• 第16章介绍单元测试、性能分析、调试、代码覆盖率等主题。
• 第17章介绍setup.rb的用法和RubyGems的创建等。
• 第21章从用户的角度介绍Ruby编辑器和IDE、ri工具以及RubyGems。
• 第22章概述了主要网站、邮件列表、新闻组、会议和IRC频道等。
从很大程度上说,本书的每章都是“全新”的。每章都经过修订,做几百处的小修订和几十处的重大修订。删除了过时或不那么重要的内容,根据Ruby本身的变化修订了内容,每章都新增了示例和说明。
读者可能想知道在原有章节中新增了哪些内容。一些新增的内容包括前面说过的Oniguruma、数学运算库和类(如BigDecimal、mathn和matrix)以及新类(如Set和DateTime)。
第10章新增了有关readpartial、非阻断I/O、StringIO类等方面的内容,还新增了有关CSV、YAML和KirbyBase的内容。在该章的数据库部分,新增了有关数据库Oracle、SQLite和DBI以及对象关系映射(Object-Relational Mappers,ORM)的内容。
第11章介绍了新出现的Ruby元素,如initialize_copy、const_get、const_missing和define_ method,还讨论了委托(delegation)和转交(forwarding)技术。
第12章的内容必须修订(尤其是有关GTK和Fox的两节)。有关QtRuby的一节是全新的。
第14章讨论了Windows one-click安装程序和几个类似的包,并改进了示例代码。
第18章新增了介绍电子邮件附件以及如何同IMAP服务器交互的两节,还介绍了Open URI库。
第19章介绍了Ruby on Rails、Nitro、Wee、IOWA和其他Web工具,还介绍了WEBrick与Mongrel。
第20章新增了讨论Rinda和Ruby元组空间实现以及与它们紧密相关的Ring的内容。
所有这些新增内容都是必不可少的吗?答案是肯定的。
本书英文版是用英语撰写的第二本有关Ruby的图书(第一本是Dave Thomas和Andy Hunt合著的Programming Ruby)。本书经过精心设计,是Programming Ruby的补充而非重复,这是本书受欢迎的重要原因。
作者着手编写本书第1版时,还没有Ruby国际大会,RubyForge、ruby-doc.org和rubygarden.org也未面世。除Ruby主网站外,Web上基本没有Ruby资料,Ruby Application Archive也只包含几百项。
那时,几乎没有有关Ruby的出版物(无论是在线的还是印刷的),每次刊登有关Ruby的文章都引起注意,并在邮件列表上公布和讨论。
众多常用的Ruby工具和库那时还没有出现。没有RDoc;没有解析XML的REXML,数学运算库也远没有现在丰富;缺乏对数据库的支持,也没有ODBC。Tk是用得最多的GUI工具包,最常见的Web开发方式是使用低级CGI库。
没有Windows one-click安装程序。Windows用户通常使用Cygwin或基于mingw的编译器。
甚至没有最原始的RubyGems系统,查找、安装库和应用程序通常完全以手工方式使用tar和make进行。
那时没人听说过Ruby on Rails,也没人使用术语duck typing,没有用于Ruby的YAML,也没有Rake。
当时使用的是Ruby1.6.4,已觉得它很酷,但Ruby1.8.5(作者当前使用的版本)更酷。
Ruby语法有些变化,但没有什么好说的。这些修改大多属于“边界状态”,比以前更合理。Ruby的一个独特之处是,括号是可选的。在98%的时间里,程序员不会注意到这种差异,但如果注意到了,将发现现在比以前顺畅和一致。
一些核心方法的语义也发生了变化,同样,这些大多是小变化。例如,以前Dir#chdir不接受代码块,但近年来能够接受了。
有些核心方法已淘汰或重命名。方法class不再有别名type(因为在Ruby中通常不讨论对象的类型);方法intern现在变成了更友好的to_sym;Array#indices现为Array#values_at。
另外,还新增了一些核心方法,如Enumerable #inject、Enumerable#zip和IO#readpartial。原来的futils库现为fileutils,它有自己的模块命名空间FileUtils,而不像以前那样将方法添加到File类中。
还有很多其他的变化,但这些修订都是经过谨慎考虑的。Ruby依然是Ruby,Ruby的很多优点源于其精心而缓慢的变化,这些修订是松本行弘和其他开发人员的智慧结晶。
当前有大量有关Ruby的图书和文章,基于Web的教程和文档资源俯拾皆是。
新工具和库不断涌现,其中最常见的是Web框架和工具、博客工具、标记工具和对象—关系映射(ORM),当然还有数据库、GUI、数值计算、Web服务、图像操作和源代码控制方面的工具和库。
Ruby编辑器得到广泛而完善的支持,还有很有用且成熟的IDE(其功能有一部分与GUI生成器重叠)。
不可否认,Ruby社区也在不断壮大和变化。今天的Ruby决非小语言,美国宇航局、美国国家海洋和大气局、摩托罗拉和其他众多大型公司、机构都使用它,它被用于处理图形、数据库、数值分析和Web开发等诸多领域。总之,Ruby已成为主流。
修订本书是令人享受的工作,希望读者能够从中获益。
如何使用本书
也许你无法通过阅读本书学会Ruby,因为其中介绍性或指南性内容较少。如果读者是Ruby新手,也许应首先阅读其他图书。
尽管如此,程序员都有顽强的毅力,因此也可能能够通过阅读本书学会Ruby,第1章确实包含简介和教程。
第1章还包含一个完整的“起步”列表(要确保它最新很困难)。该列表的用处可能因读者而异,因为每个人对何为直观的理解不同。
本书主要旨在解答“如何做”的问题,因此读者可以根据兴趣选读其中的内容。如果每位读者都自始至终阅读每一页,作者将深感荣幸,但不希望如此。作者更希望读者通过浏览目录查找需要的技巧或感兴趣的内容。
第1版面世后,作者同很多读者有过交流,发现他们确实是从头读到尾。另外,有多位读者指出,他正是通过阅读本书学会Ruby的。可见一切皆有可能。
本书有些内容可能看起来很基本,因为读者的背景和经验各异,在有些人看来显而易见的东西在其他人看来未必如此。作者尽可能确保本书内容全面,同时尽量使其篇幅合理(这显然是个很有挑战性的目标)。
本书可视为“反向参考手册”,读者不应根据名称来查找方法和类,而应根据功能或用途来查找。例如,String类有多个处理大小写的方法:capitalize、upcase、casecmp、downcase和swapcase。在参考手册中,很可能按字母顺序列出它们,但本书将它们放在一起。
当然,为确保完整性,作者有时也采用参考手册的做法。在很多情况下,作者将辅以比参考书更不寻常或更多元化的示例。
作者尽量追求较高的代码—注释率,从第1章看,这个目标达到了。作者可能变得唠唠叨叨,但程序员总是希望看到代码。
有些示例是虚构的,对此表示歉意。脱离现实问题说明技术或原理很困难,但任务越复杂越高级,作者越尽力使用实际解决方案来说明。因此,介绍字符串拼接时,可能使用包含foo、bar等平淡无奇的代码段,但介绍XML的解析等主题时,通常使用更有意义、更真实的代码段。
必须指出,本书有两三个独特之处。第一个独特之处是,避免使用类似Perl的“丑陋”全局变量,如$_等。Ruby中有这些全局变量,它们的效果不错,大多数Ruby程序员在日常工作中都使用它们。但几乎在所有情况下都可避免使用它们,本书的大部分示例都是这样做的。
第二个独特之处是,即使独立表达式没有
无封面