ZetCode

Ruby unless 关键字

最后修改日期:2025 年 4 月 27 日

本教程将解释如何使用 Ruby 的 unless 关键字。它用作负条件,在条件为 false 时执行代码。

unless 关键字是 Ruby 中“if not”的等价物。它为负条件提供了更简洁的语法。它也可以用作语句修饰符。

unless 在检查负条件时提高了代码的可读性。它可以与 else 一起使用,但不能与 elsif 一起使用。多个条件需要逻辑运算符。

基本 unless 示例

这个简单的例子演示了 unless 的基本用法。当条件评估为 false 时,它会执行代码。

basic_unless.rb
x = 5

unless x > 10
  puts "x is not greater than 10"
end

unless 块内的代码运行,因为条件 (x > 10) 为 false。这等效于 if !(x > 10),但更具可读性。

unless 与 else

unless 可以与 else 配对以提供替代的执行路径。当条件为 true 时,else 块将执行。

unless_else.rb
logged_in = false

unless logged_in
  puts "Please log in"
else
  puts "Welcome back!"
end

第一个消息打印出来,因为 logged_in 为 false。如果我们将其设置为 true,则会执行 else 块。这与 if-else 逻辑类似。

unless 修饰符

Ruby 允许将 unless 用作语句修饰符,以实现简洁的单行代码。代码执行,除非条件为 true。

unless_modifier.rb
password = "secret"
puts "Access denied" unless password == "password123"

这会打印“访问被拒绝”,因为密码不匹配。修饰符形式非常适合在语句末尾进行简单的负条件检查。

unless 与多个条件

unless 与逻辑运算符结合使用以处理复杂条件。括号有助于澄清评估顺序。

multiple_conditions.rb
age = 25
subscribed = false

unless age < 18 || subscribed
  puts "Please subscribe to access premium content"
end

消息显示,因为两个条件都不为 true。当所有组合条件评估为 false 时,unless 块将执行。

unless 与方法调用

unless 与返回布尔值的方法配合得很好。它提高了对负数检查的可读性。

method_calls.rb
def admin?(user)
  user[:role] == "admin"
end

user = { name: "John", role: "user" }

unless admin?(user)
  puts "Regular user privileges granted"
end

代码检查用户是否不是管理员。与 if !admin?(user) 相比,使用 unless 的负条件读起来更自然。

unless 用于 Nil 检查

Ruby 中一个常见的习惯用法是使用 unless 来安全地处理 nil 值。此模式可防止 NoMethodError 异常。

nil_checks.rb
def process_order(order)
  unless order.nil?
    puts "Processing order ##{order[:id]}"
  else
    puts "No order to process"
  end
end

order = nil
process_order(order)

unless 块安全地处理了 nil 情况。这种防御性编程风格在 Ruby 代码库中很常见。

unless 在循环中

unless 可以通过检查继续条件来控制循环执行。当条件变为 true 时,它会停止循环。

loop_control.rb
counter = 0

loop do
  puts "Counter: #{counter}"
  counter += 1
  break unless counter < 5
end

只要 counter < 5 为 false,循环就会继续。当 counter 达到 5 时,条件变为 true,循环中断。这颠倒了典型的 if 逻辑。

来源

Ruby 关键字文档

本教程通过实际示例涵盖了 Ruby 的 unless 关键字,展示了条件执行、修饰符和常见模式。

作者

我叫 Jan Bodnar,是一名充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教学编程方面拥有十多年的经验。

列出 所有 Ruby 教程