Ruby while 与 until 循环
循环是编程中的一个基础概念,它允许你重复执行一段代码块。
在本章中,我们将探索 Ruby 中的 while 和 until 循环,它们为你提供了基于特定条件来控制程序流程的强大方式。
1. while 循环
Ruby 中的 while 循环会在指定的条件为真 (true) 时,持续执行一段代码块。其基本语法如下:
while condition do
# 要执行的代码
end或者更常见的写法是省略 do:
while condition
# 要执行的代码
end在每次循环迭代之前,程序都会对 condition(条件)进行评估。如果条件为真,则执行循环内部的代码。当循环内的代码执行完毕后,会再次检查该条件。这个过程会一直重复,直到条件变为假 (false) 为止。
1.1 基础 while 循环示例
让我们看一个简单的例子,使用 while 循环来打印从 1 到 5 的数字:
counter = 1 # 初始化计数器变量
while counter <= 5 # 条件:只要 counter 小于或等于 5,循环就会继续
puts counter # 打印 counter 的当前值
counter += 1 # 将 counter 增加 1 (相当于 counter = counter + 1)
end
puts "循环结束!" # 这会在循环完成后打印在这个例子中:
- 我们将变量
counter初始化为 1。 while循环检查counter <= 5是否成立。- 如果条件为真,它会打印
counter的值,然后将counter增加 1。 - 循环会一直继续,直到
counter变成 6,此时counter <= 5这个条件变为假,循环终止。 - 循环结束后,执行
puts "循环结束!"这行代码。
1.2 无限循环 (死循环)
非常重要的一点是,你必须确保 while 循环中的条件最终会变为假;否则,你将创建一个永远运行的无限循环。例如:
# 请小心这个例子 - 它会无限期地运行下去!
# x = 1
# while x == 1
# puts "这会永远打印下去!"
# end在这个例子中,x 永远等于 1,所以 x == 1 这个条件永远为真,循环永远不会结束。要停止无限循环,你通常需要手动终止程序(例如,在终端中按下 Ctrl+C)。
1.3 结合用户输入使用 while 循环
while 循环经常被用来不断地提示用户输入,直到满足某个特定的条件为止。例如:
input = ""
while input != "quit"
print "输入一个命令 (或输入 'quit' 退出): "
input = gets.chomp # 获取用户输入并移除末尾的换行符
puts "你输入了: #{input}" unless input == "quit" # 除非输入的是 "quit",否则打印该输入
end
puts "正在退出程序。"在这个例子中:
- 我们将
input变量初始化为一个空字符串。 - 只要
input不等于 "quit",while循环就会继续。 - 在循环内部,程序会提示用户输入内容。
gets.chomp方法从用户那里读取一行输入,并移除任何尾随的换行符。- 然后程序会将输入的内容打印回给用户,除非输入的内容是 "quit"。
- 当用户输入 "quit" 时,条件
input != "quit"变为假,循环随之终止。
1.4 带有多个条件的 while 循环
你可以使用逻辑运算符如 && (AND/与) 和 || (OR/或),在 while 循环中组合多个条件。
counter = 1
limit = 10
flag = true
while counter <= limit && flag
puts "计数器: #{counter}"
counter += 1
flag = false if counter > 5 # 当 counter 大于 5 时,将 flag 设置为 false
end
puts "循环结束。计数器: #{counter}, 标志: #{flag}"在这个例子中,只要 counter 小于或等于 limit 并且 flag 为 true,循环就会继续。一旦其中任何一个条件变为 false,循环就会终止。
2. until 循环
until 循环正好与 while 循环相反。它会在指定的条件为假 (false) 时,持续执行一段代码块。其基本语法如下:
until condition do
# 要执行的代码
end或者更常见的写法:
until condition
# 要执行的代码
end同样,在每次迭代之前都会对 condition 进行评估。如果条件为假,则执行循环内部的代码。当代码执行完毕后,再次检查条件。这个过程会一直重复,直到条件变为真 (true) 为止。
2.1 基础 until 循环示例
让我们重写之前打印数字 1 到 5 的例子,但这次使用 until 循环:
counter = 1
until counter > 5 # 条件:只要 counter 不大于 5,循环就会继续
puts counter
counter += 1
end
puts "循环结束!"这段代码产生的输出与 while 循环的例子完全相同,但逻辑是反转的。循环会一直继续,直到 counter 大于 5。
2.2 结合用户输入使用 until 循环
与 while 循环类似,until 循环也可以用来不断提示用户输入。让我们修改之前的用户输入示例:
input = ""
until input == "quit"
print "输入一个命令 (或输入 'quit' 退出): "
input = gets.chomp
puts "你输入了: #{input}" unless input == "quit"
end
puts "正在退出程序。"这段代码的行为与 while 循环版本完全一致,但这里的逻辑是:循环会一直继续,直到用户输入了 "quit"。
3. 什么时候使用 while 还是 until
while 和 until 循环都能完成类似的任务。选择使用哪一个通常取决于代码的可读性以及你程序的特定逻辑。
- 使用
while:当你希望当条件为真时执行代码块。 - 使用
until:当你希望执行代码块,直到条件变为真。
总的来说,选择能让你的代码更容易理解和推理的那个循环结构。
4. 循环控制语句:break 和 next
虽然 break 和 next 将在后续章节中详细讲解,但这里有必要简要介绍一下它们,因为它们经常与 while 和 until 循环结合使用。
break:立即退出循环,无论循环的条件是什么。next:跳过当前迭代的剩余部分,直接进入循环的下一次迭代。
这里有一个在 while 循环中使用 break 的快速示例:
counter = 1
while true # 这通常会是一个无限循环
puts counter
counter += 1
break if counter > 5 # 当 counter 大于 5 时退出循环
end
puts "循环结束!"在这个例子中,while 循环被设置为无限运行 (while true)。然而,break 语句确保了当 counter 大于 5 时,循环会安全退出。