Menu
Coddy logo textTech

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]
challenge icon

チャレンジ

簡単

入力からカンマ区切りの整数のリストを読み込みます。2行出力してください:

  1. 各数値を2倍にし、, で連結します。map波括弧(brace)形式を使用してください。
  2. 各数値について、"<n> squared is <n*n>"という文字列を1行ずつ出力します。eachdo...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形式
quiz icon腕試し

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

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