do..end と波括弧 ({})
CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 16/56。
Rubyにはブロックを記述する方法が2つあります。それらは同じ意味を持ちますが、それぞれに推奨されるユースケースがあります。
do...end は複数行のブロックに使用します:
[1, 2, 3].each do |n|
doubled = n * 2
puts "#{n} -> #{doubled}"
end波括弧 { ... } は、短く式のような形式の1行ブロック用です:
[1, 2, 3].each { |n| puts n * 2 }この2つは優先順位がわずかに異なりますが、学習者が覚えておくべきなのはスタイルに関するルールです。それは、1行の場合は波括弧(braces)を、複数行の場合は do...end を使うというものです。
どちらの形式も値を返すことができます。ブロックの最後の式が、mapのようなメソッドに返される値となります:
[1, 2, 3].map { |n| n * 10 } # [10, 20, 30]
[1, 2, 3].map do |n|
n * 10
end # [10, 20, 30]チャレンジ
簡単入力からカンマ区切りの整数のリストを読み込みます。2行出力してください:
- 各数値を2倍にし、
,で連結します。mapの波括弧(brace)形式を使用してください。 - 各数値について、
"<n> squared is <n*n>"という文字列を1行ずつ出力します。eachのdo...end形式を使用してください。
入力が1,2,3の場合、出力は以下のようになります:
2, 4, 6
1 squared is 1
2 squared is 4
3 squared is 9チートシート
Rubyのブロックには2つの構文があります:
波括弧 { ... } は1行のブロックに使用します:
[1, 2, 3].map { |n| n * 2 } # [2, 4, 6]複数行のブロックには do...end を使用します:
[1, 2, 3].each do |n|
doubled = n * 2
puts "#{n} -> #{doubled}"
endどちらの形式も、ブロックの最後の式を返します(map のようなメソッドで使用されます)。
自分で試してみよう
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: 1行目、2倍にする、mapの波括弧形式、", "で結合
# TODO: 2行目からn行目、2乗、eachのdo...end形式
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。