具体描述
本书为日本公认的最好的Ruby入门教程。松本行弘亲自审校并作序推荐。本书支持最新的Ruby 2.0,也附带讲解了可运行于1.9版本的代码,事无巨细且通俗易懂地讲解了编写程序时所需要的变量、常量、方法、类、流程控制等的语法,以及主要类的使用方法和简单的应用,让没有编程经验的读者也能轻松掌握Ruby,找到属于自己的快乐编程方式,做到融会贯通并灵活运用到实际工作中。
本书适合Ruby初学者学习参考,有一定Ruby编程基础的读者若想再回顾一下Ruby的各知识点,本书也能提供不少帮助。
作者简介
作者简介:
高桥征义(Masayoshi Takahashi)
日本Ruby协会创始人兼会长。日本著名的IT书籍电子书平台达人出版会董事长。著有《Ruby基础教程》《Rails3绝技190招》等。喜欢的作家是新井素子。
后藤裕藏(Yuuzou Gotou)
日本网络应用通信研究所董事。喜欢平克・弗洛伊德乐队。
松本行弘(Yukihiro Matsumoto)
Ruby语言发明者,亦是亚洲首屈一指的编程语言发明者。现兼任网络应用通信研究所(NaCl)研究员、乐天技术研究所研究员、Heroku首席架构师等。昵称“Matz”。讨厌东京,喜欢温泉。
译者简介:
何文斯
上海交通大学电子工程系研究生毕业,现就职于某国际独立软件开发商,从事软件售后支持工作。对面向对象的程序设计,脚本语言及其在语音、图像等信号处理中的应用有着浓厚的兴趣。
目录信息
第1章 Ruby初探 2
1.1 Ruby的运行方法 3
1.1.1 ruby命令的执行方法 3
1.1.2 irb命令的执行方法 4
1.2 程序解说 5
1.2.1 对象 5
1.2.2 方法 5
1.3 字符串 6
1.3.1 换行符与 6
1.3.2 ' '与" " 7
1.4 方法的调用 7
1.5 puts方法 8
1.6 p方法 8
1.7 中文的输出 9
1.8 数值表示与计算 11
1.8.1 数值 11
1.8.2 四则运算 11
1.8.3 数学相关的函数 12
1.9 变量 13
print方法和变量 14
1.10 注释 14
1.11 控制语句 15
print方法和变量 16
1.12 条件判断:if~then~end 16
1.13 循环 18
1.13.1 while语句 18
1.13.2 times方法 18
第2章 便利的对象 19
2.1 数组 20
2.1.1 数组的创建 20
2.1.2 数组对象 20
2.1.3 从数组中抽取对象 20
2.1.4 将对象保存到数组中 21
2.1.5 数组的元素 22
2.1.6 数组的大小 22
2.1.7 数组的循环 23
2.2 散列 24
2.2.1 什么是符号 24
2.2.2 散列的创建 25
2.2.3 散列的使用 25
2.2.4 散列的循环 25
2.3 正则表达式 26
模式与匹配 26
第3章 创建命令 29
3.1 命令行的输入数据 29
3.2 文件的读取 30
3.2.1 从文件中读取内容并输出 31
3.2.2 从文件中逐行读取内容并输出 32
3.2.3 从文件中读取指定模式的内容并输出 33
3.3 方法的定义 34
3.4 其他文件的引用 34
第2部分 Ruby的基础
第4章 对象、变量和常量 38
4.1 对象 38
4.2 类 39
4.3 变量 39
局部变量与全局变量 40
4.4 常量 42
4.5 保留字 42
4.6 多重赋值 43
4.6.1 合并执行多个赋值操作 43
4.6.2 置换变量的值 43
4.6.3 获取数组的元素 44
4.6.4 获取嵌套数组的元素 44
第5章 条件判断 46
5.1 什么是条件判断 46
5.2 Ruby中的条件 47
条件与真假值 47
5.3 逻辑运算符 48
5.4 if语句 49
5.5 unless语句 50
5.6 case语句 51
5.7 if修饰符与unless修饰符 54
5.8 总结 54
第6章 循环 57
6.1 循环的基础 57
6.2 循环时的注意事项 58
6.3 实现循环的方法 58
6.4 times方法 58
6.5 for语句 60
6.6 普通的for语句 62
6.7 while语句 62
6.8 until语句 64
6.9 each方法 65
6.10 loop方法 66
6.11 循环控制 66
6.11.1 break 68
6.11.2 next 69
6.11.3 redo 70
6.12 总结 71
第7章 方法 73
7.1 方法的调用 73
7.1.1 简单的方法调用 73
7.1.2 带块的方法调用 74
7.1.3 运算符形式的方法调用 74
7.2 方法的分类 75
7.2.1 实例方法 75
7.2.2 类方法 76
7.2.3 函数式方法 76
7.3 方法的定义 77
7.3.1 方法的返回值 78
7.3.2 定义带块的方法 79
7.3.3 参数个数不确定的方法 80
7.3.4 关键字参数 81
7.3.5 关于方法调用的一些补充 82
第8章 类和模块 87
8.1 类是什么 87
8.1.1 类和实例 87
8.1.2 继承 89
8.2 类的创建 90
8.2.1 class关键字 91
8.2.2 initialize方法 91
8.2.3 实例变量与实例方法 92
8.2.4 存取器 93
8.2.5 特殊变量self 94
8.2.6 类方法 95
8.2.7 常量 96
8.2.8 类变量 96
8.2.9 限制方法的调用 97
8.3 扩展类 99
8.3.1 在原有类的基础上添加方法 99
8.3.2 继承 99
8.4 alias与undef 101
8.4.1 alias 101
8.4.2 undef 102
8.5 模块是什么 103
8.6 模块的使用方法 103
8.6.1 提供命名空间 103
8.6.2 利用Mix-in扩展功能 104
8.7 创建模块 104
8.7.1 常量 105
8.7.2 方法的定义 105
8.8 Mix-in 106
8.8.1 查找方法的规则 107
8.8.2 extend方法 109
8.8.3 类与Mix-in 110
8.9 面向对象程序设计 111
8.9.1 对象是什么 111
8.9.2 面向对象的特征 112
8.9.3 鸭子类型 113
8.9.4 面向对象的例子 114
第9章 运算符 117
9.1 赋值运算符 117
9.2 逻辑运算符的应用 118
9.3 条件运算符 120
9.4 范围运算符 120
9.5 运算符的优先级 121
9.6 定义运算符 122
9.6.1 二元运算符 122
9.6.2 一元运算符 124
9.6.3 下标方法 125
第10章 错误处理与异常 126
10.1 关于错误处理 126
10.2 异常处理 127
10.3 异常处理的写法 128
10.4 后处理 131
10.5 重试 131
10.6 rescue修饰符 132
10.7 异常处理语法的补充 132
10.8 指定需要捕捉的异常 133
10.9 异常类 134
10.10 主动抛出异常 135
第11章 块 136
11.1 块是什么 136
11.2 块的使用方法 137
11.2.1 循环 137
11.2.2 隐藏常规处理 138
11.2.3 替换部分算法 139
11.3 定义带块的方法 142
11.3.1 执行块 142
11.3.2 传递块参数,获取块的值 142
11.3.3 控制块的执行 144
11.3.4 将块封装为对象 145
11.4 局部变量与块变量 147
第3部分 Ruby的类
第12章 数值类 150
12.1 数值类的构成 150
12.2 数值的字面量 152
12.3 算数运算 153
除法 153
12.4 Math模块 155
12.5 数值类型转换 156
12.6 位运算 157
12.7 随机数 159
12.8 计数 160
12.9 近似值误差 161
第13章 数组类 164
13.1 复习数组 165
13.2 数组的创建方法 165
13.2.1 使用Array.new 165
13.2.2 使用%w与%i 166
13.2.3 使用to_a方法 166
13.2.4 使用字符串的split方法 166
13.3 索引的使用方法 167
13.3.1 获取元素 167
13.3.2 元素赋值 169
13.3.3 插入元素 170
13.3.4 通过多个索引创建数组 171
13.4 作为集合的数组 171
“|”与“+”的不同点 173
13.5 作为列的数组 173
13.6 主要的数组方法 175
13.6.1 为数组添加元素 175
13.6.2 从数组中删除元素 177
13.6.3 替换数组元素 179
13.7 数组与迭代器 180
13.8 处理数组中的元素 181
13.8.1 使用循环与索引 181
13.8.2 使用each方法逐个获取元素 181
13.8.3 使用具有破坏性的方法实现循环 182
13.8.4 使用其他迭代器 182
13.8.5 创建专用的迭代器 182
13.9 数组的元素 183
13.9.1 使用简单的矩阵 183
13.9.2 初始化时的注意事项 183
13.10 同时访问多个数组 185
第14章 字符串类 188
14.1 字符串的创建 189
14.1.1 使用%Q与%q 190
14.1.2 使用Here Document 190
14.1.3 使用sprintf方法 191
14.1.4 使用`` 191
14.2 获取字符串的长度 193
14.3 字符串的索引 194
14.4 字符串的连接 194
14.5 字符串的比较 195
字符串的大小比较 196
14.6 字符串的分割 198
14.7 换行符的使用方法 198
14.8 字符串的检索与置换 199
14.8.1 字符串的检索 199
14.8.2 字符串的置换 200
14.9 字符串与数组的共同方法 200
14.9.1 与索引操作相关的方法 200
14.9.2 返回Enumerator对象的方法 201
14.9.3 与连接、反转(reverse)相关的方法 202
14.10 其他方法 203
14.11 日语字符编码的转换 204
14.11.1 encode方法 204
14.11.2 nkf库 204
第15章 散列类 208
15.1 复习散列 208
15.2 散列的创建 209
15.2.1 使用{} 209
15.2.2 使用Hash.new 209
15.3 值的获取与设定 210
15.3.1 一次性获取所有的键、值 211
15.3.2 散列的默认值 211
15.4 查看指定对象是否为散列的键或值 212
15.5 查看散列的大小 213
15.6 删除键值 213
15.7 初始化散列 214
处理有两个键的散列 215
15.8 应用示例:计算单词数量 216
第16章 正则表达式类 219
16.1 关于正则表达式 219
16.1.1 正则表达式的写法与用法 219
16.1.2 正则表达式对象的创建方法 220
16.2 正则表达式的模式与匹配 220
16.2.1 匹配普通字符 221
16.2.2 匹配行首与行尾 221
16.2.3 指定匹配字符的范围 222
16.2.4 匹配任意字符 224
16.2.5 使用反斜杠的模式 225
16.2.6 重复 226
16.2.7 最短匹配 228
16.2.8 ()与重复 229
16.2.9 选择 229
16.3 使用quote方法的正则表达式 229
16.4 正则表达式的选项 230
16.5 捕获 231
16.6 使用正则表达式的方法 232
16.6.1 sub方法与gsub方法 232
16.6.2 scan方法 233
16.7 正则表达式的例子 234
第17章 IO类 237
17.1 输入/输出的种类 237
17.1.1 标准输入/输出 237
17.1.2 文件输入/输出 239
17.2 基本的输入/输出操作 240
17.2.1 输入操作 240
17.2.2 输出操作 243
17.3 文件指针 244
17.4 二进制模式与文本模式 245
17.5 缓冲 246
17.6 与命令进行交互 248
17.7 open-uri库 249
17.8 stringio库 250
第18章 File类与Dir类 252
18.1 File类 252
18.1.1 变更文件名 253
18.1.2 复制文件 253
18.1.3 删除文件 254
18.2 目录的操作 254
18.2.1 目录内容的读取 255
18.2.2 目录的创建与删除 258
18.3 文件与目录的属性 259
FileTest模块 261
18.4 文件名的操作 262
18.5 与操作文件相关的库 263
18.5.1 find库 263
18.5.2 tempfile库 264
18.5.3 fileutils库 265
第19章 Encoding类 268
19.1 Ruby的编码与字符串 268
19.2 脚本编码与魔法注释 269
19.3 Encoding类 270
Encoding类的方法 271
19.4 正则表达式与编码 274
19.5 IO类与编码 274
19.5.1 外部编码与内部编码 274
19.5.2 编码的设定 275
19.5.3 编码的作用 276
第20章 Time类与Date类 280
20.1 Time类与Date类 280
20.2 时间的获取 281
20.3 时间的计算 282
20.4 时间的格式 282
20.5 本地时间 284
20.6 从字符串中获取时间 284
20.7 日期的获取 285
20.8 日期的运算 286
20.9 日期的格式 286
20.10 从字符串中获取日期 287
第21章 Proc类 288
21.1 Proc类是什么 288
21.1.1 lambda 289
21.1.2 通过Proc参数接收块 291
21.1.3 to_proc方法 292
21.2 Proc的特征 292
21.3 Proc类的实例方法 293
第4部分 动手制作工具
第22章 文本处理 298
22.1 准备文本 298
22.1.1 下载文件 298
22.1.2 获取正文 299
22.1.3 删除标签 300
22.2 扩展simple_grep.rb:显示次数 302
计算匹配行 302
22.3 扩展simple_grep.rb:显示匹配的部分 304
22.3.1 突出匹配到的位置 304
22.3.2 显示前后各10个字符 305
22.3.3 让前后的字符数可变更 306
第23章 检索邮政编码 308
23.1 获取邮政编码 308
23.2 检索邮政编码 309
23.3 sqlite3库 309
23.4 插入数据 311
23.5 检索数据 313
23.6 总结 314
附录
附录A Ruby运行环境的构建 316
A.1 Ruby的安装 316
A.2 在Windows下安装 316
A.2.1 开始安装 317
A.2.2 同意软件使用许可协议 317
A.2.3 确认安装路径以及选项 317
A.2.4 安装进度 318
A.2.5 安装完成 318
A.2.6 启动控制台 319
A.3 在Mac OS X下安装 320
通过MacPorts安装 321
A.4 在Unix下安装 322
A.4.1 从源代码编译 322
A.4.2 使用二进制软件包 323
A.4.3 使用Ruby软件包管理工具 323
A.5 编辑器与IDE 323
没有好用的编辑器就不能编写Ruby程序吗 324
附录B Ruby参考集 325
B.1 RubyGems 325
gem命令 325
B.2 Ruby参考手册 327
B.2.1 Web上的资源 327
B.2.2 ri命令 328
B.2.3 阅读参考手册的技巧 328
B.3 命令行选项 329
B.4 预定义变量、常量 330
B.4.1 预定义变量 330
B.4.2 预定义常量 331
B.4.3 伪变量 332
B.4.4 环境变量 332
B.5 错误信息 332
B.5.1 syntax error 333
B.5.2 NameError/NoMethodError 333
B.5.3 ArgumentError 333
B.5.4 TypeError 334
B.5.5 LoadError 334
B.5.6 [BUG] 334
后记 335
谢辞 336
· · · · · · (收起)
读后感
很基础的一本书...基础的我都不知道怎么写书评了, 很适合快速过一遍ruby, 对于会查doc的人来说可以忽略了, 新手入门依然是很不错滴, 最好有其他语言经验, 这样这本书可以让你在1天之内会写ruby, 也就这么点作用了吧... 虽然比不上被奉为经典的programming ruby和metaprogrammi...
很基础的一本书...基础的我都不知道怎么写书评了, 很适合快速过一遍ruby, 对于会查doc的人来说可以忽略了, 新手入门依然是很不错滴, 最好有其他语言经验, 这样这本书可以让你在1天之内会写ruby, 也就这么点作用了吧... 虽然比不上被奉为经典的programming ruby和metaprogrammi...
很基础的一本书...基础的我都不知道怎么写书评了, 很适合快速过一遍ruby, 对于会查doc的人来说可以忽略了, 新手入门依然是很不错滴, 最好有其他语言经验, 这样这本书可以让你在1天之内会写ruby, 也就这么点作用了吧... 虽然比不上被奉为经典的programming ruby和metaprogrammi...
注意推荐给新手学习,因为之前有python,go编程经验,再加上这本书从语法开始说起,所以上手还算较快。花了3天时间,已经全部过完,后续阅读ruby源码应该不会再一头雾水。 这本书的章节安排也是非常合理,有种让人“爱不释手”。我每天晚上回家翻了一章就很想翻到下一...
注意推荐给新手学习,因为之前有python,go编程经验,再加上这本书从语法开始说起,所以上手还算较快。花了3天时间,已经全部过完,后续阅读ruby源码应该不会再一头雾水。 这本书的章节安排也是非常合理,有种让人“爱不释手”。我每天晚上回家翻了一章就很想翻到下一...
用户评价
这本书的出现,无疑为我打开了通往Ruby编程世界的大门。之前对编程一直抱着一种“高不可攀”的态度,觉得那是一门属于极少数“天才”的学科。但《Ruby基础教程》的出现,让我彻底改变了这个看法。它不是一本简单的语法手册,而是一本真正能够帮助读者理解“编程思维”的书。作者的笔触非常细腻,他不仅仅是罗列各种 Ruby 的特性,更重要的是,他会引导读者去思考,在实际编程中,我们应该如何运用这些特性来解决问题。我尤其喜欢它在讲解数据结构时,所使用的各种生动形象的比喻,让抽象的概念变得具体可感。而且,书中的代码示例都经过了反复的推敲和优化,既简洁又高效,能够让读者快速领略到Ruby语言的魅力。我曾尝试过其他一些编程入门书籍,但往往都无法坚持下去,而这本书却让我沉浸其中,欲罢不能。它让我感受到编程的乐趣,也激发了我继续深入学习的动力。
坦白说,市面上关于编程的书籍琳琅满目,很多都让人眼花缭乱。但《Ruby基础教程》凭借其独特的魅力脱颖而出。它的叙述风格非常吸引人,不像很多教材那样死板,而是带有一种探讨的意味,让我读起来感觉像是在和一位经验丰富的工程师进行交流。作者在讲解Ruby的一些核心概念时,总是能从开发者的角度出发,解释为什么要有这样的设计,以及它在实际开发中有什么优势。这让我不仅仅是学会了“怎么做”,更是理解了“为什么这么做”,这对于建立更深层次的编程思维至关重要。书中的排版设计也很用心,关键的术语和代码都用醒目的方式呈现,易于阅读和查找。我尤其喜欢它在章节末尾设置的练习题,它们很有代表性,能够很好地检验我是否真正掌握了所学内容,并且能启发我思考更多变的应用方式。这本书让我觉得学习Ruby的过程是一种乐趣,而不是一种负担。
我是一名对编程充满好奇的非技术背景的读者,一直想找到一本能够带我入门的优秀教材。《Ruby基础教程》无疑是我的最佳选择。它最大的优点在于其极高的可读性。作者在写作时,非常注重细节,将一些可能引起混淆的概念解释得非常透彻。比如,对于一些初学者容易混淆的命名空间、模块等概念,书中都用了清晰的图示和代码示例来加以区分。而且,这本书的逻辑性非常强,知识点的组织非常合理,能够让读者顺着一条清晰的线索逐步深入。我喜欢它在讲解每一个新函数或新语法时,都会先介绍它的用途,然后给出具体的用法,最后再通过一个小的应用场景来展示它的实际价值。这种“是什么-怎么用-有什么用”的学习路径,让我能够快速建立起对知识点的理解和掌握。它没有回避任何一个初学者可能会遇到的难点,而是用一种循循善诱的方式,引导读者克服这些困难。
这本书真的像是一扇窗户,把我从一个对编程懵懵懂懂的菜鸟,带进了一个充满逻辑和创造力的世界。刚开始接触编程的时候,总觉得那些代码像天书一样,各种符号和单词组合起来让人望而生畏。但《Ruby基础教程》不一样,它的语言非常平实易懂,作者似乎真的站在读者的角度,一点一点地把复杂的东西拆解开来。我尤其喜欢它在讲解每一个概念时,都会配上贴切的生活化比喻,比如讲到变量的时候,它会用抽屉来类比,告诉我抽屉可以放不同的东西,但抽屉的名字是固定的。这种方式让我一下子就抓住了核心,而不是死记硬背一堆概念。而且,书里的例子非常实用,都是一些我能看懂并且能够很快尝试的小程序,不是那种脱离实际的理论堆砌。当我跟着书里的步骤敲下第一个能运行的程序时,那种成就感是无法言喻的。感觉编程不再是遥不可及的技能,而是我可以通过努力掌握的工具。它让我对编程产生了浓厚的兴趣,并且有勇气去探索更深层次的东西。
我一直对技术类的书籍抱有一种敬畏心,总觉得它们要么晦涩难懂,要么过于理论化,难以在实践中落地。然而,《Ruby基础教程》彻底颠覆了我的看法。这本书最大的亮点在于它的循序渐进和清晰的结构。作者并没有急于抛出大量复杂的概念,而是从最基础的语法开始,层层递进,每学习一个新的知识点,都会在之前的基础上进行拓展和深化。我特别欣赏的是它在介绍Ruby语言特性时,所展现出的优雅和简洁。比如,它详细讲解了Ruby的面向对象思想,但用的例子却非常形象生动,让我这个初学者也能轻松理解类、对象、继承等概念。书中的代码片段都经过了精心设计,既能清晰地展示某个知识点,又不会过于冗长,非常适合在阅读时进行实际操作。当我遇到不理解的地方时,这本书总能提供清晰的解释和相关的补充说明,让我感觉自己不是一个人在摸索,而是有一个经验丰富的向导在指引。总而言之,这是一本真正为初学者量身打造的入门书籍,它让我对Ruby语言的掌握变得扎实而自信。
不如ruby元编程好,但可以作为工具书…
不如ruby元编程好,但可以作为工具书…
混个眼熟,不错的入门书。
teach your self Ruby in 3 days。和斧头书有的一拼,章节编排也类似。
对语法点的总结挺不错的, 书如其名, 就是基础. 4.5星