首页 > 学院 > 开发设计 > 正文

Ruby的语法和语言特性总结

2019-10-26 19:29:52
字体:
来源:转载
供稿:网友

Ruby是一种解释型、面向对象、动态类型的语言。Ruby采取的策略是在灵活性和运行时安全之间寻找平衡点。随着Rails框架的出现,Ruby也在2006年前后一鸣惊人,同时也指引人们重新找回编程乐趣。尽管从执行速度上说,Ruby谈不上有多高效,但它却能让程序员的编程效率大幅提高。本文将讲述Ruby语言的基础语言特性,包括基本的语法及代码块和类的定义。

1. 基础
在Ruby交互命令行中输入以下命令(>>为命令行提示符,=>为返回值;下文将把=>符号和语句写在一行内表明其返回值):

>> puts 'hello, world'hello, world=> nil>> language = 'Ruby'=> "Ruby">> puts "hello, #{language}"hello, Ruby=> nil

以上代码使用puts输出,给变量赋值,并用#{}的语法实现字符串替换。这表明Ruby是解释执行的;变量无需声明即可直接初始化和赋值;每条Ruby代码都会返回某个值;单引号包含的字符串表示它将直接被解释,双引号包含的字符串会引发字符串替换。

1.1 编程模型

Ruby是一门纯面向对象语言,在Ruby中一切皆为对象,可以用“.”调用对象具有的方法,可以通过class和methods方法查看对象的类型及支持的方法,如4.class => Fixnum,7.methods => ["inspect", "%", "<<", "numerator", ...],false.class => FalseClass(方括号表示数组)。

1.2 流程控制

条件判断有正常的块形式,也有简单明了的单行形式;除了常见的if语句外,还有unless语句(等价于if not,但可读性更强)。同理,循环也有正常的块形式和单行形式。注意:除了nil和false之外,其他值都代表true,包括0!

# 块形式if x == 4 puts 'This is 4.'end# 单行形式puts 'This is false.' unless truex = x + 1 while x < 10 # x的结果为10x = x - 1 until x == 1 # x的结果为1

和其他C家族的语言差不多,Ruby的逻辑运算符and(&&)、or(||)都自带短路功能,若想执行整个表达式,可以用&或|

1.3 鸭子类型

执行4 + 'four'会出现TypeError的错误,说明Ruby是强类型语言,在发生类型冲突时,将得到一个错误。如果把个语句放在def...end函数定义中,则只有在调用函数时才会报错,说明Ruby在运行时而非编译时进行类型检查,这称为动态类型。Ruby的类型系统有自己的潜在优势,即多个类不必继承自相同的父类就能以“多态”的方式使用:

a = ['100', 100.0]puts a[0].to_i # => 100puts a[1].to_i # => 100

这就是所谓的“鸭子类型”(duck typing)。数组的第一个元素是String类型,第二个元素是Float类型,但转换成整数用的都是to_i。鸭子类型并不在乎其内在类型是什么,只要一个对象像鸭子一样走路,像鸭子一样嘎嘎叫,那它就是只鸭子。在面向对象设计思想中,有一个重要原则:对接口编码,不对实现编码。如果利用鸭子类型,实现这一原则只需极少的额外工作,就能轻松完成。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表