携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情
一、条件控制语句
程序的流程控制是编写复杂程序的基础,基本上流程控制分为两种,一类是条件执行,通过逻辑判断来选择要执行的代码,另一类是循环执行,依照一定的规则来重复执行一段代码。
本文将使用 JetBrains 的 Ruby IDE RubyMine 来进行代码编写,将不再使用 irb 交互式命令行; 使用的 Ruby 版本依然是 2.7.6。
Ruby 中的条件控制语句的形式有 3 中,分别是 if、unless 和 case。
if 条件控制
Ruby 中的 if 条件控制语句的形式如下:
if 条件表达式 [then]
...
elsif 条件表达式 [then]
...
else [then]
...
Ruby 中的 if 和其他语言中的 if 没有大的区别,如果 if 后的条件表达式为 true,则执行第一个 then 后的代码,之后跳出条件表达式,执行 end 后面的代码,如果 if 条件表达式后的代码为 false,则往下判断 elsif 后的表达式是否为真,如果为真则执行 then 后面的代码,否则再跳到下一个 elsif 判断表达式是否为真,如果都为 false,最后调到 else 并执行 then 后面的代码,最后跳出条件控制语句。
条件判断语句中可以有多个 elsif 但是只能有一个 if 和一个 end
age = 100
if age < 18
puts "age < 18"
elsif age < 30
puts "age < 30"
elsif age < 50
puts "age < 50"
elsif age < 70
puts "age < 70"
else
puts "age 大于 70"
end
执行上述代码,输出结果如下:
age 大于 70
if 还有一种用法,就是将符合条件的表达式写在 if 前,如果为真返回表达式,如果为 false 返回 为空
表达式 if 条件判断表达式
age = 100
puts "age > 18" if age > 18 # age > 18
unless 条件控制
unless 语句与 if 语句使用方式类似,表达式为如下形式:
unless 条件表达式 [then]
···
else
...
end
unless 语句的执行流程是如果 unless 后的表达式为 false,则执行 then 后面的代码,否则执行 else 后的的代码。
逻辑上来讲 unless 的执行效果与 if 刚好相反。
age = 10
unless age > 20
puts "age <= 20"
else
puts "age > 20"
end
执行上述代码,输出结果如下:
age <= 20
unless 也有类似 if 的修饰用法
表达式 unless 条件判断表达式
puts "age <= 20" unless age > 20 # age <= 20
只有当 unless 后面的条件为 false 的时候才会执行 unless 前面的表达式。
case 条件控制
不同于 if 和 unless 通过范围来匹配条件,case 是通过匹配值来选择执行,case 语句的形式如下:
case 表达式
when 表达式1,表达式2,表达式2
...
when 表达式3,表达式4,表达式5
...
when 表达式6,表达式7,表达式8
...
else
...
end
case 表达式执行时用第一个表达式的值与 when 后面的表达式的值一次进行匹配,如果匹配到这执行 then 后面响应的代码,否则调到下一个 when 语句再去匹配 when 后面的表达式的值,如果最后都没有匹配到则会执行 else 代码块中的代码,最后跳出 case 条件表达式。
a = "Ruby"
case a.class.name
when "String"
puts "a 是字符串"
when "Integer"
puts "a 是整数"
when "Float"
puts "a 是浮点数"
else
puts "a 既不是字符串也不是数字"
end
执行上述代码,输出结果如下:
a 是字符串
when 关键字后面是具体的值,也可以是表达式,但是表达式必须有一个结果返回。