Menu
Coddy logo textTech

インライン if / unless

CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 41/56。

Rubyでは、1行の修飾子として、単一のステートメントの最後ifunlessを置くことができます。ほとんど英語のように読めます。

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

三項演算子と同様に、短いステートメントにはインライン修飾子を使用してください。処理内容が1行を超える場合は、代わりに実際の if ブロックを記述してください。

challenge icon

チャレンジ

簡単

カンマ区切りの整数のリストを読み込みます。各数値について、その数値が0でない場合に限り、1行出力してください:

  • n > 0 の場合positive: <n> と出力します
  • n >= 0 でない限りnegative: <n> と出力します

両方の行でインライン修飾子形式を使用する必要があります(if ブロックや else は使用しないでください)。ループの後、Skipped zeros: <count> を出力してください。ここで、countは0の数であり、これも if ブロックを使わずに計算してください(count を使用します)。

入力が 3,-2,0,5,0 の場合、出力は以下のようになります:

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

チートシート

Rubyでは、単一のステートメントの末尾にインライン修飾子として ifunless を記述することができます:

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

ガード節や単純な条件付き更新に便利です:

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

counts[w] += 1 unless w.start_with?("#")

インライン修飾子は1行の処理に対してのみ使用し、それより長い場合は通常の if ブロックを使用してください。

自分で試してみよう

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

# TODO: 各数値に対してインラインの `if` / `unless` を使用して出力してください
# TODO: count を使用して Skipped zeros: <n> を出力してください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン