词条 | Ruby程序设计 |
释义 | Ruby是一种为了让程序设计更快乐而开发的程序语言。Ruby具有“彻底面向对象”、“丰富的程序库”、“亲和力高的直观语法形式”等多项特征。 概述Ruby处在当前主流的位置上,并非“行家才知道,专业人员为导向的程序语言”。在学习Ruby的人群当中,应该有很多人是看了参考手册后,不知道要用Ruby 来做什么。本书并非以功能项目进行分类,而是以“想要做的事”作为主轴来进行分类,对于读者的学习绝对大有裨益。本书是在活用Ruby时不可离手的一本书,它能够帮助大家在程序设计的道路上获得更多的快乐。 图书信息作 者:【日】青木峰郎 后藤裕藏 高桥征义 著【日】松本行弘 审校 博硕文化 译 出 版 社: 电子工业出版社 出版时间: 2009-6-1 页 数: 424页 开 本: 短16开 I S B N :9787121088124 估 价: 59.00元 内 容 简 介Ruby是为了让程序设计更快乐而开发的程序语言。Ruby具有“彻底面向对象”、“丰富的程序库”、“亲和力高的直观语法形式”等多项特征,但这些特征并不是Ruby的目的,只能说是为了让程序设计更有趣而开发的手段罢了。 Ruby处在当前主流的位置上,并非“行家才知道,专业人员为导向的程序语言”。在学习Ruby的人群当中,应该有很多人是看了参考手册后,不知道要用Ruby 来做什么。本书并非以功能项目进行分类,而是以“想要做的事”作为主轴来进行分类,对于读者的学习绝对大有裨益。本书是在活用Ruby时不可离手的一本书,它能够帮助大家在程序设计的道路上获得更多的快乐。 希望本书的读者,都能从使用Ruby的过程中,找到属于自己的“兴趣”与“乐趣”。——若您可以这样灵活运用,那将是本书作者无上的荣幸了。 第二版审校者序 由2007年初往前回顾,我认为《Ruby程序设计》初版发行的2004年,对于Ruby来说是正值飞跃发展之际。同样是2004年所发表的Web Application Framework——Ruby on Rails、“15分钟建立一个Blog系统”的视频短片与“具有Java 10倍的生产力”的宣传口号,更是瞬时让Ruby在业界中备受瞩目。 我想也许是时间点恰恰好吧。Ruby真的很幸运。这个时代越来越要求单一程序设计师其个人的生产性,另一方面计算机运算能力有着飞跃性进步,可以容许“浪费”计算能力。在21世纪的今日,像上面这样的动态程序语言一直都是众人所需,而在满足这些需求的程序语言中,Ruby凭着Ruby on Rails的话题性,早一步到达这样的位置。此外,在Mac OS X上不仅仅将Ruby及Ruby on Rails当作标准的内建程序,也同时附加了控制OS的函数库,大有取得继Objective-C之后的开发程序语言地位的态势。 在现在Ruby与Ruby on Rails的周边环境,存在着“15分钟建立一个简单Blog系统,有什么意义”、“真的有Java 10倍的生产力吗?!”等想法单纯的问题。而这些问题实际上无论是真是假都好,重要的是“Ruby与Ruby on Rails就存在于当前,而且帮助程序设计师变得更快乐”这个事实。远在Ruby变得有名气之前开始,它就已经是一个对程序设计师很有用的工具了,而这一点从今以后我想应该也不会改变吧。 现在,Ruby并非“行家才知道,专业人员为导向的程序语言”,而是处在当前主流的位置上。在学习Ruby的人群当中,应该有很多人是看了参考手册后,不知道要用Ruby来做什么。本书并非以功能项目进行分类,而是以“想要做的事”作为主轴来进行分类,对于各位的学习绝对可以帮上不少忙。我个人认为,本书是在大家活用Ruby时不可离手的一本书。若Ruby与本书能够帮助大家在程序设计的道路上获得更多的快乐,我会感到十分欣慰。 2007年1月 于前往东京的班机上 松本行弘 初版审校者序在设计一种新的程序语言时,会有三件难事。第一是设计一个“好的”程序语言,再来就是一本入门书,最后就是如何使用这个语言方法的Recipe手册(或者Cookbook)。 对于Ruby来说,幸运的是第一件事已经解决了,但要克服接下来的事情就真的很不简单。入门书及Cookbook不论谁都希望能够出书,我们也企划了很多次,但始终“这本书”都没有出现。比起创造语言本身,我真的觉得执笔写出一本好书更加困难。 但是随着《Ruby Programming——向Ruby之父学程序设计》出版,第二项困难也被解决了,剩下的就是Cookbook。接着,《Ruby Programming——向Ruby之父学程序设计》的作者们得到了强力的援军——《Ruby原始码完全解说》的作者加入,终于完成了大家引颈期盼的《Ruby程序设计》。真的是可喜可贺! 这本书最重要的就是帮助那些跨过Ruby门槛的人,在解决实际问题上收集各式各样的诀窍方法。虽然本书分析了在使用Ruby过程中各式各样的情况,但绝不会钻入难以了解的解释之中,而是细心又详细地解说到程序的每个小角落。虽然本书刻意地回避了Ruby所有功能中部分高度复杂以及难解的部分,但熟练本书中的内容之后,我想也是可以快速地凌驾Ruby的中级者程度吧。在此之后,就应该可以以自身的能力向更高等级前进。 我由衷希望本书能够成为各位在Ruby程序设计上的良友。 Happy Hacking. 松本行弘 写在前面写了一个开源的程序并意外地被广泛使用这种事并不少。因工作关系写程序的不说,因自己的兴趣开始写程序,而刚好有机会被自己以外的人来使用。甚至,也常听到将程序发布到像Web一样许多人目光所及之处后,结果程序被远超过想象多的人来使用。 在刚开始写程序的时候,使用那个程序的用户,恐怕应该只有自己本身吧。起初因为学习等目的而开始写程序,在测试及确认可运作之后,就不会再被使用了。 像这样一个人来撰写程序,一个人使用,然后又丢掉的程序,使用怎样的撰写方式或许都无所谓。只要能够简单地写出来,能像预期的来运作就足够了。如果以料理来讲的话,一想到只有自己吃,就算食材已经超过保存期限,只要没有奇怪的味道就好了,或者是因为用盘子来装菜的话,要洗的盘子就变多,所以干脆吃炸面包就好了等,这样就会在不知不觉中越来越草率。就会想到“反正只跟我自己有关系,又不会影响到其他人”。 不过,一旦这些东西与其他人有交互时,就完全不同了。如果被某人招待的话,就会觉得不使用敬语是不行的。说到写程序也是一样的,用完就丢的一行指令与发布公开的脚本,写法一定会有所不同。 再者,写程序与做料理不同,会有许多人来进行,在未见过也未知的对方作品上来进行修改也不在少数。特别是以脚本语言写的程序,因为大多是以原始码的形式来流通,所以不论是谁都可以轻易地取得。因此,不单只是要让使用程序的人觉得好用,也要让写程序的人觉得好用,这样的程序才是我们所期待的。 总而言之,对我来说,追求的不只是写程序的快乐,而是要能够对写程序的人待若上宾。 当然,要达到这样的期望,不能只有想法,多样的程序语言知识也是必要的。这些知识包括了在某种程序语言中共同的知识,也包括只存在某个特定程序语言的特性。另外,也包括在许多情况下有用的技巧,以及在特定对象领域中不可欠缺的技巧。必须要熟悉各式各样的知识,然后加以使用。 再者,有时在待人的态度方法上也要多费心思。例如重新检阅算法、重新设计类别后进行测试、专注在方法名称及变量名称上等。这些工作大家或许都觉得很麻烦吧?不过,或许也正因为你花了这些工夫在程序上,而使得用户在使用时的愉悦更上一层楼也说不定。这是非常幸福的一件事。然后,一天天地积累这些工作,不正是成就你写出更好程序的基石吗? * * * 在Perl等程序语言中,有一种称为“食谱(Cookbook)”的书。我们之前一直以写出这类书的Ruby版为目标开始执笔动工。不过或许实际上写出来的书其倾向会有点不同。把在Perl中的那类书当作教导读者做出满汉全席的话,我们写出来的这本书可能就是为普通人的基本家常菜而已,在程度上多少有些差异。不过,我们的目标是让这本书成为不输给那类书,而对读者能有很大帮助的一本书。 我想在这本书中你一定可以找到一些你所不知道的菜谱。而如果这些菜谱可以帮助你写出一个善待用户的程序的话,身为作者的我们就得到最大的喜悦了。 如果这本书能迎合您的口味的话,我们真的感到非常荣幸。 作者群 初版致谢紧接着在《Ruby Programming——向Ruby之父学程序设计》之后,本书也得到许多人的帮助而能顺利到了出版的阶段。 最要感谢的人就是SoftBank出版社第一书籍编辑部的杉山先生。如果没有他坚强的耐心以及长时间跟进的话,本书绝对无法到达出版阶段。真的是非常感谢。 接下来要感谢的是Ruby的亲生父亲、给予我们审校帮助的松本行弘先生,以及帮我们审阅的Nakamura、Nahi、Yamda Akira、Watanaba Hirofumi,以及安藤叶子小姐、沓名亮典先生、后藤谦太郎先生、西山和广先生、一步先生以及其他我们在本书中所使用函数库的开发者等,还有在Ruby的各Mailing List及IRC中提供各种有用以及有趣信息的社群朋友,还有ruby-lang.o rg各项服务的管理者,以及开发及维护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来表示。这种表示方法与实际在程序中的表示方法是相同的。 目 录第1章 Ruby的语法 001 常值(literal) 2 002 运算符 6 003 变量与常数 9 004 代入 11 005 程序语句的分段 12 006 备注 13 007 真假值与条件判断 14 008 循环 17 009 调用方法 19 010 区块(block) 20 011 方法(Method)定义 21 012 限制方法的调用 22 013 类别(Class)定义 23 014 模块(Module)定义 24 015 特殊方法 25 016 例外处理 26 017 alias与undef 27 018 保留字 28 第2章 字符串 019 选择适当的字符串常值 30 020 设置默认的文字编码 32 021 变换文字编码 34 022 推测文字编码 37 023 复制字符串 39 024 重复字符串 40 025 取得字符串长度 41 026 查找字符串 42 027 查询正则表达式是否匹配字符串的开头/结尾 45 028 匹配单字 46 029 以特定的文字编码来进行正则表达式匹配 48 030 在正则表达式“.”中匹配\ 50 031 从上次匹配的部分开始继续匹配 51 032 计算特定的文字、字符串出现的次数 53 033 计算字符的出现频率 55 034 比较字符串 56 035 对空白进行匹配 57 036 判断字符串是否为空行 58 037 判断是否为表示数值的字符串 59 038 将字符串变换为数值 60 039 判断字符为大写或小写 62 040 将字母变换为大写/小写 63 041 取出字符串的一部分 65 042 取出正则表达式匹配的部分 67 043 取出正则表达式匹配部分的前后字符串 69 044 查询包含特定文字部分的长度 70 045 将字符串分割为段落 71 046 将字符串分割为行 73 047 将字符串分割为单字 74 048 以正则表达式来分割字符串 76 049 处理字符串的个别文字 78 050 处理字符串的单一字节 79 051 链接字符串 80 052 置换字符串的一部分内容 81 053 跳脱字符/除去跳脱字符 83 054 除去字符串的一部分 85 055 取出行尾的换行字符 87 056 除去字符串开头/结尾的空白 89 057 变换Tab与半角空格符 91 058 变更缩排 92 059 将Here Document缩排后编写 94 060 在字符串结尾加上字符串 95 061 对字符串的一部分进行破坏性删除 97 062 在字符串中间破坏性地插入字符串 99 063 字符与字符编码相互变换 101 064 将字符串依n个文字来分割 103 065 将字符串切出最大n字节的部分字符串 104 066 将字符串切出最大n个文字的部分字符串 106 067 将字符串切出最大n位的部分字符串 107 068 以特定文字来隐藏部分字符串 108 069 建立信息摘要(Message Digest) 109 070 判断字符串是否可作为正确的正则表达式 111 071 跳脱正则表达式的Meta文字 112 072 判断字符串是否同时与多个正则表达式匹配 113 073 分割正则表达式来记述 114 074 正则表达式集 116 075 将字符串整形为各段落 118 076 解析各种文字格式 119 077 处理以“,”来分隔的数据(CSV) 122 078 解析XML 124 079 解析YAML 127 080 处理HTML 129 081 自动补完单字 132 082 判断是否为有效的E-mail地址 134 第3章 数组(Array)与哈希(Hash) 083 建立数组 136 084 复制数组 138 085 建立多维数组 139 086 依序处理数组及哈希的所有元素 140 087 并行处理多个数组 141 088 多维数组的循环 143 089 取得数组的元素 144 090 改变数组的元素 146 091 删除数组的元素 147 092 在数组的开头/结尾加入元素 148 093 取出并除去数组开头/结尾的元素 149 094 置换数组的元素 150 095 随机取得数组中的元素 151 096 随机排列数组中的元素 152 097 查询数组的元素个数 153 098 查询数组中元素的出现次数 154 099 从数组中一次取出多个元素 155 100 取得数组中索引与元素的配对组 156 101 将数组中元素填入相同的值 157 102 由数组中取出并除去重复的元素 158 103 取得数组中满足条件的元素 159 104 查找数组的元素 160 105 比较两个数组 161 106 找出两个数组中相同的元素 162 107 取出两个数组间的差 163 108 连接数组 164 109 将数组中元素的顺序反转 165 110 将一定范围的整数作为数组的元素 166 111 将数组作为(以“,”)连接的字符串 167 112 二元查找法 168 113 建立哈希的键值类别 169 114 在哈希中加入元素 170 115 查询哈希内键值是否存在 171 116 删除哈希的元素 172 117 显示哈希的内容 173 118 将哈希元素以插入顺序取出 174 119 建立单一键可对应多值的哈希 176 120 交替哈希的键与值 177 121 排序数组及哈希 178 122 合并哈希 180 123 找出两个哈希中都有的键/只有一个哈希才有的键 181 124 设置默认值 182 125 使用巨大的离散数组 183 126 建立具有Collection特性的类别 184 127 使用堆栈与队列 185 第4章 文件与目录 128 将文件名分割为其组成元素 188 129 从相对路径求出绝对路径 189 130 判断路径名是否吻合样式(Pattern) 190 131 取得目录与文件一览 192 132 取得目前所在的目录名称 194 133 变更当前目录 195 134 求得执行脚本所处的路径 196 135 更改文件名 197 136 复制文件 198 137 删除文件 200 138 判断文件是否可读取、可写入 201 139 判断文件是否存在/判断其种类 202 140 取得文件属性 203 141 变更文件属性 205 142 建立链接 207 143 判断两个文件是否相同 209 144 建立目录 211 145 对目录内的所有文件进行递归处理 212 146 递归复制目录 213 147 删除目录 214 148 事先确认文件操作 215 149 新增名称不重复的文件 216 第5章 输入/输出 150 打开文件 219 151 以行为单位来处理文件 220 152 读取文件内容 222 153 建立新的文件 224 154 在文件末尾加入数据 226 155 以单行指令(One-liner)更新文件 227 156 使输出操作与文件更新同步 228 157 计算文件的行数 229 158 将文件由文件末尾开始处理至行单位中 230 159 读取正在写入的文件 232 160 建立暂存文件 233 161 锁定文件 234 162 将文件转为十六进制 235 163 在文件中插入一行 236 164 以二进制模式写入文件 238 165 处理固定长度的记录 239 166 切割文件大小 241 167 删除文件开头的n行 242 168 删除文件末尾的n行 243 169 将标准输入/输出接替至文件 245 170 复制I/O对象 246 171 以printf来格式化输出 248 第6章 数值 172 格式化数值 251 173 位运算 253 174 在二进制、八进制、十进制、十六进制间相互转换 254 175 将数值每三位以“,”区隔开来 255 176 指定次数并重复处理 256 177 求解最大值、最小值 257 178 求解数值的总和 258 179 求绝对值 259 180 求除法的余数 260 181 求解指数 262 182 求最大公因数及最小公倍数 263 183 求解平方根 264 184 计算三角函数 265 185 将直角坐标系转换为极坐标系 266 186 进行对数计算 267 187 对浮点数进行四舍五入等处理 268 188 比较浮点数 270 189 取得随机数 271 190 使用矩阵 272 191 使用复数 274 192 使用有理数 275 第7章 日期与时间 193 查询现在的日期与时间 277 194 由日期时间中取出月份、星期几等 279 195 日期时间与Epoch秒相互转换 280 196 求两个日期时间的差 282 197 格式化日期时间 283 198 将字符串转换为日期时间 285 199 求出由1月1日起到目前所经过的天数 286 200 判断闰年 287 201 求出一个月最后一天的日期 288 202 判断是否为假日 289 203 求出“本月第三个星期一”的日期 290 第8章 环境相关 204 将Ruby脚本做成一般指令 292 205 暂时性地在做成指令的Ruby脚本上加入选项后执行 295 206 取得命令行的参数 296 207 解析命令行选项 298 208 存取环境变量 301 209 让脚本作为指令或者函数库都可以执行 302 210 控制Ruby的函数库加载器(Library Loader) 303 211 对Ruby脚本进行除错 304 212 取得用户及群组相关信息 307 213 切换使用者ID、群组ID 310 214 存取Windows登录文件(Registry) 312 215 调用系统函数库的函数 313 第9章 程序间通信 216 暂时停止脚本 317 217 测量脚本的运行时间 318 218 启动指令 320 219 产生子程序(fork) 322 220 设置信号处理器(Signal Handler) 323 221 Deamo 324 222 控制Windows的应用程序 325 223 取得本机名称 327 224 变换机器名称以及IP位置 328 225 建立TCP客户端 329 226 制作一个TCP服务器 330 227 建立HTTP客户端 332 228 存取其他程序的Ruby对象 334 第10章 CGI 229 由窗体中取出输入值 337 230 取出Query字符串 338 231 使用Session 339 232 处理Cookie 341 233 参照Meta变量 343 234 输出HTML头文件 344 235 对URL进行编码/反编码 345 236 跳脱/不跳脱HTML 346 237 使用污染模式(taint mode) 347 238 预防XSS(Cross Site Scripting) 349 239 在HTML中嵌入Ruby脚本 351 240 上传文件 352 第11章 对象 241 判断对象是否相同 354 242 复制对象 356 243 查询对象的类别 357 244 将对象转换为字符串 359 245 将对象转换为数值 360 246 将对象转换为数组 362 247 将对象存储在文件中 363 248 多重继承 365 249 委托方法 366 250 委托区块 368 251 建立可作为String或Array来操作的类别 369 252 使用无名函数 371 253 多载方法 372 254 使用关键词参数 374 255 定义模块函数 375 256 定义类别方法的别名 376 257 将实例变量依各个类别来设为private 377 258 查询方法是否存在于对象中 379 259 取得对象中定义的方法列表 381 260 保有兼容性并改变方法名 383 261 保有兼容性并改变参数的个数 384 262 保有兼容性并加上/移除区块 386 263 保持兼容性并更改类别名 387 264 保有兼容性并更改函数库名 388 265 在旧版Ruby中使用新版Ruby的方法 389 266 将文件当作Ruby脚本来载入 390 267 将字符串当作Ruby脚本来执行 391 268 替代脚本文件名/行编号 392 附录A A01 Web上的资源 394 A02 指令列选项 395 A03 Ruby参考的环境变量 397 A04 Ruby标准类别及函数库 398 A05 printf格式化字符串 401 A06 pack模板字符串 403 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。