写了一个开源的程序并意外地被广泛使用这种事并不少。因工作关系写程序的不说,因自己的兴趣开始写程序,而刚好有机会被自己以外的人来使用。甚至,也常听到将程序发布到像Web一样许多人目光所及之处后,结果程序被远超过想象多的人来使用。.
在刚开始写程序的时候,使用那个程序的用户,恐怕应该只有自己本身吧。起初因为学习等目的而开始写程序,在测试及确认可运作之后,就不会再被使用了。
像这样一个人来撰写程序,一个人使用,然后又丢掉的程序,使用怎样的撰写方式或许都无所谓。只要能够简单地写出来,能像预期的来运作就足够了。如果以料理来讲的话,一想到只有自己吃,就算食材已经超过保存期限,只要没有奇怪的味道就好了,或者是因为用盘子来装菜的话,要洗的盘子就变多,所以干脆吃炸面包就好了等,这样就会在不知不觉中越来越草率。就会想到“反正只跟我自己有关系,又不会影响到其他人”。
不过,一旦这些东西与其他人有交互时,就完全不同了。如果被某人招待的话,就会觉得不使用敬语是不行的。说到写程序也是一样的,用完就丢的一行指令与发布公开的脚本,写法一定会有所不同。
再者,写程序与做料理不同,会有许多人来进行,在未见过也未知的对方作品上来进行修改也不在少数。特别是以脚本语言写的程序,因为大多是以原始码的形式来流通,所以不论是谁都可以轻易地取得。因此,不单只是要让使用程序的人觉得好用,也要让写程序的人觉得好用,这样的程序才是我们所期待的。
总而言之,对我来说,追求的不只是写程序的快乐,而是要能够对写程序的人待若上宾。
当然,要达到这样的期望,不能只有想法,多样的程序语言知识也是必要的。这些知识包括了在某种程序语言中共同的知识,也包括只存在某个特定程序语言的特性。另外,也包括在许多情况下有用的技巧,以及在特定对象领域中不可欠缺的技巧。必须要熟悉各式各样的知识,然后加以使用。
再者,有时在待人的态度方法上也要多费心思。例如重新检阅算法、重新设计类别后进行测试、专注在方法名称及变量名称上等。这些工作大家或许都觉得很麻烦吧?不过,或许也正因为你花了这些工夫在程序上,而使得用户在使用时的愉悦更上一层楼也说不定。这是非常幸福的一件事。然后,一天天地积累这些工作,不正是成就你写出更好程序的基石吗?
* * *
在Perl等程序语言中,有一种称为“食谱(Cookbook)”的书。我们之前一直以写出这类书的Ruby版为目标开始执笔动工。不过或许实际上写出来的书其倾向会有点不同。把在Perl中的那类书当作教导读者做出满汉全席的话,我们写出来的这本书可能就是为普通人的基本家常菜而已,在程度上多少有些差异。不过,我们的目标是让这本书成为不输给那类书,而对读者能有很大帮助的一本书。
我想在这本书中你一定可以找到一些你所不知道的菜谱。而如果这些菜谱可以帮助你写出一个善待用户的程序的话,身为作者的我们就得到最大的喜悦了。
如果这本书能迎合您的口味的话,我们真的感到非常荣幸。
作者群
初版致谢
紧接着在《Ruby Programming——向Ruby之父学程序设计》之后,本书也得到许多人的帮助而能顺利到了出版的阶段。
最要感谢的人就是SoftBank出版社第一书籍编辑部的杉山先生。如果没有他坚强的耐心以及长时间跟进的话,本书绝对无法到达出版阶段。真的是非常感谢。
接下来要感谢的是Ruby的亲生父亲、给予我们审校帮助的松本行弘先生,以及帮我们审阅的Nakamura、Nahi、Yamda Akira、Watanaba Hirofumi,以及安藤叶子小姐、沓名亮典先生、后藤谦太郎先生、西山和广先生、一步先生以及其他我们在本书中所使用函数库的开发者等,还有在Ruby的各Mailing List及IRC中提供各种有用以及有趣信息的社群朋友,还有ruby-lang.org各项服务的管理者,以及开发及维护Ruby的相关人员们,我们在此由衷向你们表示感谢。真的非常感谢你们的帮助。
还有,本书原本只预定由《Ruby Programming——向Ruby之父学程序设计》的两位作者后藤以及高桥先生来执笔,不过在苦战的结尾,我们向青木先生寻求支持,而形成三人的团队。在最终的原稿执笔上,青木先生的贡献是最大的。虽然是作者群中的一人,也不能说得上是致谢,但在此还是要记下本书能顺利发行的经过。
关于本书
本书的对象及其操作环境
.本书主要的对象为..
对于Ruby的概要已经了解的读者
虽然不懂Ruby,但已经学过其他程序语言的读者
而对于那些第一次接触程序设计以及Ruby的人来说,我们并不推荐您阅读此书。不过我们推荐您阅读本书的姊妹篇——《Ruby Programming——向Ruby之父学程序设计》。
另外,本书的操作环境为Ruby 1.6.7版至1.8.5版。其中我们会特别将重点放在1.8.5版上。
部分与版本有关会造成不同结果的程序代码,我们会在该项技巧的“说明”部分补充有关版本间兼容性的问题。
在操作系统环境部分,工作平台可以是Windows及各种UNIX。特别与工作环境有关的脚本,请各位读者确认是否为以下的操作系统。
Windows XP SP2 / mswin32版Ruby(i686)
Windows XP SP2 / Cygwin版Ruby(i686)
Windows 2000 SP4 / mswin32版Ruby(i686)
Windows 2000 SP4 / Cygwin版Ruby(i686)
Debian 3.1(Linux 2.6 / AMD64)
Debian 3.1(Linux 2.6 / i686)
Solaris 9(SPARC 32bit)
Tru64UNIX 5.1B(Alpha)
各个技巧(Recipe),可由 、 的标示来知道该技巧是否可在Windows或UNIX环境下使用。
给使用Windows的使用者
可以在Windows下执行的Ruby程序有许多种,其中以Cygwin版与UNIX的操作最为相近,所以这个版本是包含在 标示中,而不是 标示。
正文中的表示方式
程序的输出
书中程序的输出内容会以“输出方法的侧边,或者在次行加上 #=) ,然后其右侧为输出结果”的方式来表示,如:
# 以p方法来显示"Hello, Ruby."
p "Hello, Ruby." #=) "Hello, Ruby."
这种方式在Ruby的使用手册中经常使用。
实例方法与类别方法
本书在方法的表示方式上也是采用在Ruby使用手册中常用的表示方式。
实例方法使用“类别名称#方法名称”来表示。例如String类别的实例方法length,本书中会以String#length来表示。这种表示方式是在文件或者说明中使用的,若在程序中使用的话,则会发生错误,请读者要特别注意。
类别方法在本书中会以“类别名称.方法名称”来表示。例如Array类别的类别方法new,在本书中会以Array.new来表示。这种表示方法与实际在程序中的表示方法是相同的。...