インライン if / unless
CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 41/56。
Rubyでは、1行の修飾子として、単一のステートメントの最後に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三項演算子と同様に、短いステートメントにはインライン修飾子を使用してください。処理内容が1行を超える場合は、代わりに実際の if ブロックを記述してください。
チャレンジ
簡単カンマ区切りの整数のリストを読み込みます。各数値について、その数値が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では、単一のステートメントの末尾にインライン修飾子として if や unless を記述することができます:
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> を出力してください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。