第八章 文档编写、错误处理、调试和测试

RDoc称自己为“Ruby源代码的文档生成器”,它可以通读Ruby源代码文件,并创建结构化HTML文档。

:nodoc:

开启和关闭RDoc处理:#++、#--

异常被打包在Exception(异常)类或Exception的许多子类的对象中。

抛出异常为raise

处理异常可以使用rescue,以及“begin...end”代码块来处理异常

接收并使用异常:“rescue => e",把异常对象本身赋值给变量e

catch和throw方法:对符号(一定要注意,是Ruby里面所谓的符号)进行处理

catch和throw无须直接在同一个作用域内,当throw在其作用域内无法找到使用特定符号的代码块时,将从栈中向上跳回,直到找到这样的代码块

Ruby调试器:ruby -r debug 文件名

调试器提示符界面主要的命令:

list:列出当前正在运行的程序代码,如“list 2-4"显示第2行到第4行的代码。如果没有任何参数,list显示当前执行点的局部程序。

step:单行运行程序的下一行代码。后面也可以加参数多行运行

cont:继续运行程序,不再单行运行。程序将持续运行,直到程序结束,或碰到断点,或碰到watch命令的某个条件成为true状态。

break:在某行设置断点,例如”break 3"设置第三行为断点

watch:设置条件断点

quit:退出调试器

测试

测试驱动开发:开发人员在进行编码之前,首先创建一组必须通过系统的测试代码,然后严格地使用这些测试代码来保持程序代码的完整性。

Ruby自带了一个程序库Test::Unit,它能以清晰的结构对测试包进行组织管理。

几种Test::Unit断言

assert(<逻辑表达式>)

assert_equal(预期值表达式,实际值表达式)

assert_not_equal(预期值表达式,实际值表达式):两值相等时,断言将不通过

assert_raise(异常类型1,...){<代码块>}:仅当断言之后的代码块抛出参数指定类型的异常时,才能通过

assert_nothing_raised(异常类型1,..){<代码块>}:仅当列表中的异常没有抛出时,断言才能通过

assert_instance_of(预期类,对象):仅当对象是预期类的实例时,才能通过

flunk:永远不能通过

性能基准度量(benchmark):是指让代码或程序执行某个功能,并度量其所耗费的运行时间的过程。

性能优化分析:分析哪些代码占用了多长时间

第九章 文件和数据库

打开和读取文件:可以用File.open或者File.new,区别是:File.open可以接受代码块,当代码块运行结束时,文件将自动关闭。而File.new仅返回指向文件的File对象,要关闭文件,必须用File对象的close方法。

each方法文件根据定界符读取文件,而标准定界符是“换行符”,用户可以自行修改这个定界符,也可以自定义定界符。

如果使用each_byte方法来逐字节地读取I/O流,每次得到的是每个字符的字节值,而不是字符本身。

此外,,还有gets方法(多次循环),getc(多次循环字节),readlines(读取整个文件),read(读取任意个字符放到某个变量中)

在文件中的指针位置:pos方法可以返回在文件中当前所处的位置

pos方法返回文件指针,是从文件开头起算,但是pos可以双向操作,因为它有个姊妹方法pos=,可以先把指针放到指定位置

写入文件:使用File.open的第二个参数“w”,可以以只写方式打开文件,创建新文件或覆写已有文件。

File.new可用的文件模式

文件模式

输入输出流的属性

r

只读,文件指针放在文件开头

r+

可读可写,文件指针放在文件开头

w

只写。创建新文件(或覆写旧文件)

w+

可读可写,但File.new从零创建新文件(或覆写旧文件)

a

写(以附加模式)。文件指针放在文件末尾,写操作将使文件增长

a+

可读可写(以附加模式)。文件指针放在文件末尾,写操作将使文件增长

b

二进制文件模式(仅Windows需要),可与上述模式并用

puts方法用来输出文本行,而与getc和read方法等价的写操作是putc和write方法,用于输出字符和字节。

改名:File.rename(原文件名,新文件名)

删除文件:File.delete(一个或多个文件名),File.unlink

检查相同文件:File.identical

搜索:使用seek方法,有以下三种操作模式

IO::SEEK_CUR:从当前位置向前移动若干个字节

IO::SEEK_END:移动到文件末尾为基准的某个位置,这表示从末尾开始搜索,可能需要使用负数。

IO::SEEK_SET:移动到文件的绝对位置,与pos=完全相同

找出文件上次修改时间:File.mtime

检查文件是否存在:File.exist

得到文件大小:File.size

判断已到文件末尾:eof?

目录移动:Dir.chdir

--------------------------------------------------------------------------------------------

Ruby的标准程序库提供了csv的程序库,用来处理包含CSV数据的文本文件

四大数据库(通用):MySQL,PostgreSQL,Oracle和SQLite

Ruby on Rails框架默认数据库是MySQL