Ruby 零基础教程

Ruby while 与 until 循环

循环是编程中的一个基础概念,它允许你重复执行一段代码块。

在本章中,我们将探索 Ruby 中的 whileuntil 循环,它们为你提供了基于特定条件来控制程序流程的强大方式。

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

whileuntil 循环都能完成类似的任务。选择使用哪一个通常取决于代码的可读性以及你程序的特定逻辑。

  • 使用 while当你希望当条件为真时执行代码块。
  • 使用 until当你希望执行代码块,直到条件变为真。

总的来说,选择能让你的代码更容易理解和推理的那个循环结构。

4. 循环控制语句:break 和 next

虽然 breaknext 将在后续章节中详细讲解,但这里有必要简要介绍一下它们,因为它们经常与 whileuntil 循环结合使用。

  • 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 时,循环会安全退出。