第八章 文档编写、错误处理、调试和测试
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