《Ruby入门权威经典》(一)

孤街浪徒 提交于 2020-04-03 10:30:22

作者:于天恩 北京航天航空出版社出版发行。

Ruby是一种语言,其单词含义为“红宝石”。Rails是一种技术框架,其单词意思为“铁轨”。于是“Ruby on Rails”的含义就是铺满红宝石的铁轨。Rails是B/S结构的编程框架,基于Ruby语言。这类似于ASP基于VBScript和JSP(Struts)基于Java。

单独学习Ruby是可以的,你可以使用Ruby去编写各种程序。不过,通常人们不会这么做,对我而言,最好的万能语言是Java,用JBuilder开发Java程序是非常舒服的。如果你也不打算使用Ruby作为万能语言的话,那么最好使用它来做Web开发,也就是使用Ruby on Rails框架,这是Ruby最好的应用。

生而知之者,上也;学而知之者,次也;困而知之者,又其次也。

“人事有可陷者,亦有不可陷者”,陷于技术,不值得。

悟性,因人而异,不可强求,欲望,因人而异,不应执着。

诚然人的天资很重要,非常重要,相当重要。但有几句话要提醒读者:“勤能补拙是良训,一分辛劳一分才”。天资是天给的,不是人定的。但在天资之外,你还有很多事情可以做,通过勤奋、坚持、刻苦,纵然超不过天才,你也定然能成为超越常人的天才。

Ruby语言的特点:(1)解释执行,不需要编译即可运行,调高了调试速度,不过执行效率低。(2)变量无类型,错误检查能力变弱,区分大小写。(3)变量不需要声明(4)不需要内存管理,能自动回收不再实用的对象。(5)纯粹的面向对象,包括整数等基本数据类型都是对象,它们都有发送消息的统一接口。(6)迭代器,将循环抽象化,从而使得代码简洁。(7)功能强大的字符串操作(8)超长整数(9)可以直接访问操作系统,因此单独使用Ruby也可以进行系统编程。(10)用模块进行混合插入,舍弃了多重继承,使用模块来超越类的界限以共享数据和方法等。(11)闭包,可以将某过程片段对象化。(12)动态加载,可以在运行时读入对象文件。

第一章 Ruby语言基础

特别注意安装版本如果是1.9.x的不支持中文,因为最好安装1.8.x。

(1)Ruby中的引号包含单引号和双引号,单引号中可以包含双引号,双引号中也可以包含单引号。大多数情况下,这两种符号是通用的。

(2)转义字符:\、\t、\n。

(3)连句符:分号就是语句的连接符。换行符:\n。注意:如果被输出字符串不是以换行符结尾,puts方法就会在输出的语句后增加一个换行符;如果输出字符串以换行符结尾,那么puts方法就不会在语句结尾增加换行符。

(4)连行符:当语句过长时,会影响阅读,希望分成多行去写。一种方式是使用字符串连接符来连接语句,但字符串连接符属于运算符,会消耗资源。而连行符属于格式控制字符“\”。

(5)注释符:单行注释使用“#”;多行注释使用“=begin”和“=end”块。

(6)局部变量:即普通变量,在Ruby中由小写字母或下划线开头,局部变量在使用之前如果不初始化,将会出错。。

(7)基本输入:Ruby中使用gets方法来解决最基本的输入问题。例如,可以用a = gets来将用户输入的字符保存在局部变量a中。

(8)基本输出:puts和print。

(9)数字和字符串连接:Ruby支持整型和浮点型。使用“+”作为字符串连接符号。

**************************************************************************************************

(1)类:Ruby的面向对象比Java纯粹,一切都是对象。所以,Ruby中没有函数,只有方法;Ruby中所有的变量、常量都不能脱离类存在。

(2)最简单的类:属性+方法。在Ruby中,类名以大写字母开头,实例属性以“@”开头,变量和方法名应该用一个小写字母或者下划线开头。定义类的方法是用“def...end”语句块,如果需要方法返回值,可用“return”语句。类的初始化使用“initialize”方法。

(3)类的基本使用:Ruby是用new方法来构建类的实例,如:m=Man.new。构造实例之后,就可以使用类的方法。

(4)继承:Ruby是用“<”符号来实现类的继承,这与Java中的“extends”及C++中的“:”不同。在子类中增强父类方法要使用“super”作为关键字(如果要加强的父类方法有参数,那么就用super(参数)的方式来加强)。

(5)单态方法:Ruby是弱类型语言,只有重写,没有重载。故没有办法显示出其多态性。但是Ruby有单态方法,这意味着,从某个共同的类衍生出的多个对象可以拥有各自不同的方法。

(6)方法访问控制:在Ruby中只有方法,没有函数,每一种方法都是存在于类中的。那么,如果不在任何类中的定义的方法,应该属于Object类。理论上讲,这个方法可以被所有的对象使用,但如果是真的,这样就乱了。所以,Ruby将其实现为Object类的私有方法,于是,它不能被对象使用。Ruby中提供了三个关键字来限制对方法的存取:pubulic,可以为任何对象所存取的方法(public是所有方法的默认设置);protected,可以在定义它的实例或者子类的实例中调用;private,只可以在这个方法所处的对象中被使用,不能直接调用另一个对象的private方法,包括调用自身也不允许。 这些关键字被插在两个方法之间的代码中,所有从private关键字开始定义的方法都为私有的,知道代码中出现另一个存取控制关键字为止。一个类的initialize方法自动为私有的。(除了在方法之前设置其访问权限之外,还可以在方法定义之后设置,如:public:free private:sayname,:sayage)。

(7)属性读写控制:类中的属性,包括只读属性、只写属性和读写属性。通过类似set和get的函数来进行设置。

(8)垃圾收集:Ruby实现了自动的内存管理,实现了垃圾收集。它没有类似Java的finalize方法,但它有类似.NET的GC类用来实现垃圾清理和内存回收。GC类具有disable、enable、start、garbage_collect4个方法,其中前两个是关闭和启动垃圾收集器,start方法和garbage_collect意义相同,都是调用start方法来实现垃圾收集功能。

(9)异常处理:Ruby使用begin...rescue...end结构来处理异常,这类似于Java中的try...catch...finally。应用方法是一直的,都是在某个块中监视,找到异常就处理。retry语句可以重新执行begin块中的内容。Ruby中使用raise语句抛出异常,类似于Java的throw语句。异常的信息可以被全局变量$!获得。Ruby中使用ensure语句来实现语句块的最后清理,类似于Java中的finally。注意:在begin...rescue...end块中可以只使用ensure或rescue(这类似于try...catch...fiannly),但如果同时使用ensure和rescue,那么ensure必须在rescue后面。

**************************************************************************************************

(1)Ruby有三类变量、一种常量和两种严格意义上的为变量,变量和常量都没有类型。在Ruby里不需要声明变量,由首字母标识符将常量和变量分类。

变量类型描述 示例

局部变量 以小写字母或下划线卡头 var _var
全局变量 以$开头 $var
类变量 类中定义,以@@开头 @@var
实例变量 对象中定义,以@开头 @var
常量 以大写字母开头 Var

注意:Ruby的为变量self永远指向当前正执行着的对象或未初始化变量的空值nil。虽然这两者的命名都像是局部变量,但self是由解释器把持的全局变量,而nil实际上是个常量。

(2)常量:常量由大写字母开头,最多被赋值一次。不过如果赋值多次,只会产生警告,不会产生错误。

(3)全局变量:全局变量由“$”开头,可以再程序的任何位置访问到。在初始化前,全局变量有个有一个特殊的值nil。

$!:最近一次的错误信息; $_:gets最近读的字符串; $&:最近一次与正则表达式匹配的字符串 $n:最近匹配的n个子表达式 $/:输入记录分隔符 $0:Ruby脚本的文件名 $$:解释器进程ID $@:错误产生的位置 $.:解释器最近读的行数 $~:作为子表达式组的最近一次匹配 $=:是否区别大小写的标志 $\:输出记录风格福 $*:命令行参数 $?:最近一次执行的子进程的退出状态。

(4)unless语句:用于选择条件,是“if”选择的否定版。多重选择语句:case(与when进行组合),相当于C++中的switch语句。

(5)while循环:单行while循环 单条语句 while 条件;until循环 until 条件 代码 end;for...in循环 for 变量 in 集合对象 对象 end。

循环控制:break 跳出当前循环;next 忽略本次循环的剩余部分,开始下一次的循环,相当于C中的continue;redo 不检查循环条件,重新开始当前循环;retry 从头开始重复这个循环体。

(6)块:它是一种可以和方法调用相关联的代码块。块是在大括号或者do...end之间的一组代码。使用Ruby的yield语句方法可以一次或多次的调用相关联的块。带参数的块,参数被两条竖线包围,多个参数之间使用逗号分隔。

(7)迭代器是从某种集合对象中连续返回元素的方法。在Ruby库中大量使用了块来实现迭代器。数组和区间都属于集合对象。

(8)过程对象:把一块代码作为参数向某个方法传递。创建过程对象需要使用proc关键字,创建好的过程对象可以使用,通过call方法就能使用这个对象。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!