Ruby Programming | 连载 06 - Ruby 面向对象

简介: Ruby Programming | 连载 06 - Ruby 面向对象

一、Ruby 面向对象

Ruby Programming | 连载 03 - Ruby 对象基础 这篇文章中,已经了解到了 Ruby 对象的基础,本文中将深入的了解 Ruby 的面向对象特性。

在 Ruby 程序中,大部分的代码都是围绕对象展开的,编写程序时的主要动作就是创建对象,赋予对象一些方法或者行为,并执行这些行为。比如当需要程序实现计算、输出或者比较操作时,都需要通过对象来完成,比较两个数是否相等不是直接比较,而是通过调用方法判断 A 是否等于 B。

在流行的面向对象编程语言中,如 Java、Python、C++,包括 Ruby,每个对象都是一个样例或者既定类的实例以及独立对象的行为,至少在一定程度上,这些对象的行为都是在类中的方法所定义的。

Ruby 提供了一套完整的,包括了对象命名、创建、指向和操作的工具,以及处理这些对象和对象操作数据的方式或者规则。

给对象添加行为

面向对象的概念是非常简单的,生活中的一本书、一瓶水、一辆车或者一栋房子都可以看做一个对象,对象是真实存在的,相对来说类是一种抽象的东西,类中定义了属性和行为;当然在动态语言中,也可以为对象动态的添加一些行为后者方法。

接下来先来看如何操作一个 Ruby 对象,并给这个对象定义行为,通过一个 Object 类来初始化一个 obj 对象:

obj = Object.new
复制代码

Ruby 中 BasicObject 是最顶层的父类,Object 继承自 BasicObject,不过先不用关心这些。先来看一看 obj 对象可以进行什么操作。

定义对象的行为

行为即方法,Ruby 中定义一个方法需要用到 def 关键字,比如使用 defobj 对象添加一个 say_hi 方法

def obj.say_hi
    puts "Hi"
    puts "This is Ruby SPEAKING"
end
复制代码

image.png

发送消息到对象(对象调用方法)

obj.say_hi
复制代码

image.png

定义带参数的行为

Ruby 中的方法类似数学函数,执行步骤都是:输入数据,执行函数体,最后输出结果,给 Ruby 方法输入可以在调用方法时提供一个或者多个参数。

在方法定义时可以在方法名之后的括号中指定传递的参数名,参数分为可选参数和必选参数,这里先来了解下必选参数,当调用方法时要传入必选参数才能调用成功。

我们将方法中定义的参数成为形式参数,实际调用传递的参数成为实际参数

我们给 obj 对象定义一个 intro 函数,该函数需要传入一个 name 参数,代码如下:

def obj.intro(name)
  puts "My name is #{name}"
end
复制代码

这里的 #{name} 是插值表示法。

接着通过打点方式来调用 intro 函数,并传入一个 name 变量,代码如下:

obj.intro("Ruby")
复制代码

输入结果如下:

image.png

调用时传参的圆括号可以省略,比如 puts 函数调用时常将圆括号省略。

定义方法的返回值

在 irb 中上面执行两个方法的代码时都会出现 => nil,这里表示的意思是返回值为空,nil 就表示一个空对象。

Ruby 中定义方法的返回值需要使用到 return 关键字,return 关键字也是可选的。这里给 obj 对象再定义一个具有返回值的函数,代码如下:

def obj.add(x, y)
  put "output x + y"
  return x + y
end
复制代码

调用 obj 对象的 add 方法,输出结果如下:

image.png

当然我们也可以通过一个变量来接收 add 方法返回的值。

Ruby 中的方法只允许有一个返回值,当 return 关键字后有多个返回值时,Ruby 会将它们放到一个数组中并返回。

image.png

上述方法中定义了一个 multi_ret 函数,该函数通过 return 返回了 1,2,3,4 四个数,但是我们通过一个变量来接收 multi_ret 方法的返回值,通过输出变量的类型来看,实际上 Ruby 是将 return 后面的四个数转换成了一个数组后再进行输出的。


相关文章
|
6月前
|
程序员 Ruby
|
6月前
|
程序员 Ruby
|
6月前
|
Ruby
|
6月前
|
Java Ruby
|
Java 程序员 数据安全/隐私保护
【Ruby高级技术】对面向对象里的控制访问,包括类的继承类常量的深入理解和使用
【Ruby高级技术】对面向对象里的控制访问,包括类的继承类常量的深入理解和使用
135 1
Ruby Programming | 连载 08 - Ruby 方法参数
Ruby Programming | 连载 08 - Ruby 方法参数
Ruby Programming | 连载 08 - Ruby 方法参数
Ruby Programming | 连载 07 - Ruby 对象的原生行为
Ruby Programming | 连载 07 - Ruby 对象的原生行为
Ruby Programming | 连载 07 - Ruby 对象的原生行为
|
存储 IDE 开发工具
Ruby Programming | 连载 03 - Ruby 对象基础
Ruby Programming | 连载 03 - Ruby 对象基础
Ruby Programming | 连载 03 - Ruby 对象基础
|
IDE Java Linux
Ruby Programming | 连载 01 - Intro and Setup
Ruby Programming | 连载 01 - Intro and Setup
Ruby Programming | 连载 01 - Intro and Setup
|
存储 Ruby
Ruby Programming | 连载 10 - Ruby 的类
Ruby Programming | 连载 10 - Ruby 的类