Menu
CoddyTech

内联 if / unless

本课属于 Coddy Ruby 学习旅程的“逻辑与流程”单元。第 41 课,共 56 课。

Ruby 允许你把 if 和 unless 放在单条语句的末尾,作为单行修饰符。读起来几乎就像英语。

puts "Adult" if age >= 18
puts "Save your work" unless saved

这与下面的内容相同:

if age >= 18
  puts "Adult"
end

unless saved
  puts "Save your work"
end

内联形式适合在方法开头进行守卫式检查,也适合在循环中进行一次性的条件更新:

return if name.nil? || name.empty?

counts = Hash.new(0)
words.each do |w|
  counts[w] += 1 unless w.start_with?("#")
end

和三元表达式一样,短语句可以使用内联修饰符。如果主体超过一行,就改用真正的 if 代码块。

challenge icon

挑战

简单

读取一个以逗号分隔的整数列表。对于每个数字,仅当它不为零时,打印一行:

  • 当 n > 0 时,打印 positive: <n>
  • 除非 n >= 0,否则打印 negative: <n>

两行都必须使用内联修饰符形式(不使用 if 代码块,也不使用 else)。循环结束后,打印 Skipped zeros: <count>,其中 count 是零的数量,同样不能使用 if 代码块来计算(使用 count)。

对于输入 3,-2,0,5,0,输出为:

positive: 3
negative: -2
positive: 5
Skipped zeros: 2

亲手试试

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: 对每个数字,使用行内 `if` / `unless` 进行输出
# TODO: 使用 count 输出 Skipped zeros: <n>
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Ruby 在线编译器