Ruby 零基础教程

Ruby 条件语句

条件语句赋予了程序“做决定”的能力,让程序能够根据特定条件是真 (true) 还是假 (false) 来执行不同的代码块。

本章将深入探讨 ifelsifelse 语句,它们是 Ruby 中实现条件逻辑的核心工具。

1. if 语句:有条件地执行代码

最基础的条件语句就是 if 语句。只有当指定的条件为真 (true) 时,它才会执行其内部的代码块。

age = 20

if age >= 18
  puts "你已经成年了。"
end

代码解析:

  • age = 20:将数值 20 赋值给变量 age
  • if age >= 18:检查 age 的值是否大于或等于 18。因为 20 大于 18,所以这个条件为真 (true)。
  • puts "你已经成年了。":由于条件为真,这行代码被执行,并在控制台打印出文本。
  • end:这个关键字标志着 if 代码块的结束。

如果条件为假 (false),if 代码块内部的代码将被直接跳过

age = 16

if age >= 18
  puts "你已经成年了。"
end
# 这里没有任何输出,因为条件 (age >= 18) 为假。

1.1 if 语句的变体(单行修饰符)

对于非常简单的 if 语句,Ruby 提供了一种极其简洁的写法,称为语句修饰符 (statement modifier)

age = 25
puts "符合投票资格" if age >= 18  # 打印 "符合投票资格"

这完全等同于:

age = 25
if age >= 18
  puts "符合投票资格"
end

这种单行修饰符非常适合只有一行代码需要条件执行的场景,能让逻辑一目了然,大大提升代码的可读性

2. else 语句:提供备选方案

else 语句是 if 语句的自然延伸。它提供了一个备选的代码块,专门在 if 条件为假 (false) 时执行。

temperature = 15

if temperature > 20
  puts "外面很暖和。"
else
  puts "天气有点冷。"
end

代码解析:

  • temperature = 15:给变量赋值 15。
  • if temperature > 20:检查温度是否大于 20。因为 15 不大于 20,所以条件为假 (false)。
  • puts "天气有点冷。":因为 if 的条件为假,程序跳过了 if 块,转而执行 else 块,打印出“天气有点冷。”。

3. elsif 语句:处理多个条件

elsif 语句("else if" 的缩写)允许你按顺序检查多个条件。它为你处理更复杂的决策场景提供了便利。

score = 75

if score >= 90
  puts "优秀!"
elsif score >= 80
  puts "很好!"
elsif score >= 70
  puts "良好。"
else
  puts "需要改进。"
end

代码解析:

  • if score >= 90:检查分数是否大于等于 90。结果为假。
  • elsif score >= 80:继续检查分数是否大于等于 80。结果为假。
  • elsif score >= 70:继续检查分数是否大于等于 70。结果为真 (true)(因为 75 大于 70)。
  • puts "良好。":这行代码被执行,打印出“良好。”。
  • 注意: 一旦某个条件成立,剩下的 elsifelse 块将全部被直接跳过。

3.1 elsif 的重要注意事项

  • 按顺序评估elsif 条件是自上而下逐一检查的。第一个结果为真的条件会触发其对应的代码块,其余的统统忽略。
  • 数量不限: 你可以写任意多个 elsif 语句来检查各种情况。
  • 兜底方案else 语句(如果存在的话)充当“兜底”角色,只有当前面所有的 ifelsif 条件都为假时,它才会被执行。

4. 使用逻辑运算符组合条件

你可以使用逻辑运算符将多个表达式组合起来,创建更复杂的判断条件:

  • && (逻辑与 AND): 只有当所有表达式都为真时,整个条件才为真。
  • || (逻辑或 OR): 只要至少有一个表达式为真,整个条件就为真。
  • ! (逻辑非 NOT): 翻转表达式的值。如果表达式为真,加了 ! 后就变成假;反之亦然。

&& (AND) 示例:

age = 25
has_license = true

if age >= 18 && has_license
  puts "你有资格开车。"
else
  puts "你没有资格开车。"
end

在这里,必须同时满足年龄大于等于 18 且拥有驾照,才会打印“你有资格开车。”。

|| (OR) 示例:

is_weekend = true
is_holiday = false

if is_weekend || is_holiday
  puts "今天是休息日!"
else
  puts "该去工作了。"
end

在这个例子中,即使 is_holiday 是假的,但因为 is_weekend 是真的,整个条件就成立了,所以会打印“今天是休息日!”。

! (NOT) 示例:

is_raining = false

if !is_raining
  puts "我们出去散步吧!"
else
  puts "待在家里看书。"
end

这里 is_raining 本身是 false,加上 ! 取反后变成了 true,因此会执行打印“我们出去散步吧!”。

5. 嵌套条件语句

你可以将 if 语句嵌套在其他的 if 语句内部,以构建更错综复杂的决策树。但是请注意,过度嵌套会让代码变得难以阅读和维护

age = 60
country = "CN"

if country == "CN"
  if age >= 60
    puts "在中国符合领取老年福利的资格。"
  else
    puts "在中国还不符合领取老年福利的资格。"
  end
else
  puts "老年福利的资格因国家而异。"
end

在这个例子中,外层的 if 语句首先检查 country 是否为 "USA"。如果是,内层的 if 语句才会去检查 age 以判断是否符合该国的福利资格。