Logo
Section 1 / 6

测试变量和分支

通过互动示例学习条件表达式。

导入

测试变量和分支

通过互动示例学习条件表达式。

变量比较

任何编程语言的基础之一就是变量比较,或称变量测试。根据比较结果的不同,我们可以执行程序的这一部分或另一部分。举个例子:如果用户的年龄小于18岁,我们就可能要求他们提供额外信息,或者阻止该用户访问。实现这种功能有专门的术语。让我们来仔细看看:

  • 分支:指程序可能包含多个分支和代码块,当满足特定条件时,这些代码块会被执行。

  • 分支、代码块:通常指一段代码,它在某些条件下可以执行,也可以不执行。

  • 比较、测试、if语句、条件:这指的是比较本身,包括检查变量或值是否相等、不相等、大于、小于、真值或假值等。有经验的程序员常使用“测试”一词,意思是“对变量进行某种值的检测”。在 Linux、macOS 或其他 POSIX 兼容的操作系统中,我们可以在 shell(非 Ruby)环境下查看关于变量测试的文档:

1$ man test 2... 3test - 检查文件类型并比较值

在本课程后续内容中,我们将学习最基本的单元测试,并编写自己的测试。这些也属于测试,但类型不同。通常,单元测试包含多行代码,而变量测试一般只有 1 到 2 行代码。

下面我们来看看变量比较是如何工作的。请在下面的输入框中输入你的年龄,然后点击“运行”按钮。

1# 变量比较 2 3puts '你的年龄?' 4age = gets.to_i 5if age > 18 6 puts '访问已授权' 7end

我们使用 if 语句来比较变量 age 和数值 18。如果表达式 age > 18 为真,则执行第 4 行的代码块。这个代码块目前只有一行,但我们可以根据需要添加更多行。如果表达式 age > 18 为假,那么该代码块将不会被执行。

通常,我们使用两个空格的缩进来表示所有代码块。这不会影响程序的行为,但能提高代码可读性。一些代码分析工具(如 Rubocop)会在未遵循此规则时发出警告。

现在,我们逐渐接近前几章讨论的数据类型。来看下面这段代码示例:

1# 使用 'true.class' 2 3puts true.class # 显示 true 的类 4puts false.class # 显示 false 的类

true.is_a?(Boolean) 会抛出错误,因为在 Ruby 中没有统一的布尔类型。唯一存在的类是 TrueClass 和 FalseClass。这两个类具有相同的功能,但行为相反。而在 C 语言中,true 和 false 是以 int(整数)形式表示的。

1# 使用 'true.is_a' 时出现错误 2 3true.is_a?(Boolean)

运算符

有多种方式可以比较变量或值。以下是常用的比较运算符列表:

运算符说明
>大于
<小于
==等于
!=不等于
>=大于等于
<=小于等于
<=>三路比较运算符(仅 Ruby 支持)
===严格相等(仅 JavaScript 支持)
!==严格不相等(仅 JavaScript 支持)

三路比较运算符 (<=>)

是的,它看起来像一艘飞船!虽然本课程不会深入讲解它,但它在实现排序时非常有用。例如,当我们想按每种动物寿命的年数对动物数组进行排序时,它就很有帮助。

比较运算符

与 Ruby 相比,JavaScript 在比较方面显得特别有趣。它有两种比较方式:严格比较 === 和更常用的类型转换比较 ==。在宽松比较中,我们可以比较不同类型的数据,比如字符串和数字,或者鸭子和鸵鸟等:

1$ node 2> '5' == 5 3true

但在严格比较中,JavaScript 只允许比较相同类型的对象:

1$ node 2> '5' === 5 3false

幸运的是,Ruby 只有一种比较方式。如果比较不同类型的对象,结果总是 false:

1$ irb 2'5' == 5 3false

顺便提一下,本章开头的程序中有一个故意的错误:我们保留了 age > 18 这个条件,但实际上应该使用 age >= 18,因为我们希望将访问我们虚构网站的用户年龄限制设为 18 岁及以上。

当条件简单时,我们可以使用所谓的 一行写法。语法分为两部分,但写成一行:

1exit if age < 18

上面的代码看起来就像一句普通的英语句子:“如果年龄小于 18,则退出。” 这种简洁的写法让程序更加易读。不过在这种情况下,程序会直接退出,没有任何提示。如果我们想添加提示信息,那么分支就需要 两行(第 2 行和第 3 行):

1# 使用小于运算符的代码 2 3if age < 18 4 puts '访问被拒绝' 5 exit 6end

有时,一行写法不仅合理,还能让程序更清晰易懂。而且有些写法就像自然语言句子一样,使程序更易于理解和维护。

Ruby 基础知识

组合条件