持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
五、流程控制
unless 语句
unless 是”如果....不能,除非....才..“的意思,在程序中unless的作用于 if 是相反的,如果条件为true,则执行else关键字后的代码块,如果条件为false,则执行then后面的代码块。
unless 条件 then
条件为false时执行的代码块
else
条件为true时执行的代码块
end
name = "thor"
unless name=="thor" then
puts "不是 God of Thunder"
else
puts "是 God of Thunder"
end
执行上述代码,输出结果为:
是 God of Thunder
case 语句
case 语句是将 case 关键字后的条件值一次与 when 后的常量进行比较,只要相等机会执行该 when 关键字后面的代码块。
case 表达式
when 值1,值2,值3 then
代码块
when 值4, 值5, 值6 then
代码块
else
代码块
end
then 是可以省略的
day = "Sun"
case day
when "Mon"
puts "今天是周一"
when "Sat", "Sun"
puts "今天是周末"
else
puts "今天是除了周末和周一以外的一天"
end
执行以上代码,输出结果如下:
今天是周末
when 关键字后面可以是一个 Range 对象,只有条件值在该 Range 范围内既可输出代码块中的内容
六、循环语句
在 Ruby 中,循环主要有三种,分别是 while 循环、until 循环和 for..in 循环。
while 语句
while 循环是指当指定的条件为 true 时,循环while关键字后的代码块。
while 条件 do
代码块
end
while 关键字后的 do 可以省略,为了程序可读性不建议省略
# Ruby 中循环
i = 0
while i < 9 do
puts "Mark " + i.to_s
i = i + 1
end
执行上述代码,输出结果如下:
Mark 0
Mark 1
Mark 2
Mark 3
Mark 4
Mark 5
Mark 6
Mark 7
Mark 8
while 语句中一定要有循环退出的操作,否则会无限循环下去。
until 语句
until 语句与 while 语句的作用是相反的,当条件为 false 时,执行 until 语句中的代码块
until 条件 do
条件为false时执行的代码块
end
i = 9
until i < 0 do
puts "Mark " + i.to_s
i = i - 1
end
执行上述代码,输出结果如下:
Mark 9
Mark 8
Mark 7
Mark 6
Mark 5
Mark 4
Mark 3
Mark 2
Mark 1
Mark 0
for ... in 语句
Ruby 中的 for...in 语句,主要作用于数组和 Hash 对象,主要是用作遍历数组和 Hash 对象中的元素。
for 元素变量名 in Array | Hash do
代码块
end
for..in 遍历数组
for hero in ["thor", "stark", "clint"]
puts hero
end
执行以上代码,输出结果如下:
thor
stark
clint
for..in 遍历 Hash 对象
# 遍历Hash
for k,v in {"name" => "stark", "age" => "30", "address" => "NY"} do
puts "k=" + k + ",v=" + v
end
执行上述代码,输出结果如下:
k=name,v=stark
k=age,v=30
k=address,v=NY
loop
loop 关键字也可以实现循环,但是 loop 关键字没有条件,只能依赖跳出循环的关键字停止循环
loop {代码块}
loop do
代码块
end
迭代器
迭代器主要是用于将数组、Hash 对象和普通对象的变量进行迭代输出,可以对某个对象定义自己的迭代器,这样就可以无须使用 for...in 来完成循环了,起始迭代器只是用来遍历对象中的元素。
Array.each do |元素的名称|
代码块
end
days = ["Mon", "Feb", "Wen"]
days.each do |day|
puts day
end
执行上述代码,输出结果如下:
Mon
Feb
Wen
要注意自定义的变量名称需要|自定义变量名称|
七、跳出循环
在循环中有可能元素满足了某一条件就需要跳出本次循环而继续执行下一次循环或者直接结束循环等,Ruby 中也有 break、next、redo、return 等关键字来实现这些效果。
break 关键字
break 关键字在循环中可以跳出当前循环。
i = 0
loop do
i = i + 1
puts i
if i > 5
break
end
end
执行上述代码,输出结果如下:
1
2
3
4
5
6
next 关键字
next 关键字只会结束当前循环,之后进入下一次循环,而 break 是结束整个循环。
i = 0
while i < 8
if i == 5
i = i + 1
next
end
puts i
i = i + 1
end
上述代码执行结果如下:
0
1
2
3
4
6
7
当 i = 5 时,没有输出。
redo 关键字
redo 关键字也可以实现跳出本次循环,继续下一次循环的功能,与 next 不同的是,redo不需要检查条件是否成立,可以直接执行下一次循环。
i = 0
while i < 8
if i == 5
i = i + 1
redo
end
puts i
i = i + 1
end
执行上述代码,输出结果如下:
0
1
2
3
4
6
7
在 next 或者 redo 关键字前要进行变量更新,否则容易造成死循环
return 关键字
return 关键字也可以用来结束循环语句,return 的主要作用是结束一个方法,并且针对这个方法有返回值。
def search(n)
names = ["stark", "thor", "clint", "banner"]
for name in names do
puts name
# puts n
if name == n then
return true
else
return false
end
end
end
if search("banner") then
puts "banner 是第一个"
else
puts "banner 不是第一个"
end
if search("stark") then
puts "stark 是第一个"
else
puts "stark 不是第一个"
end
执行上述代码,输出结果如下:
stark
banner 不是第一个
stark
stark 是第一个
search() 函数的入参是 “banner”,当循环到第一个元素时,if 表表达式返回false 循环结束。