本文へスキップ
BecomeCoder

Rubyコース · 第9章 実務のRuby ― 記法を深める · レッスン38

可変長引数とエンドレスメソッド ― 柔軟な定義

ブラウザで完結

導入

メソッドは「いくつ渡されるか分からない引数」を受け取ったり、短く一行で定義したりできます。実務でよく見る2つの記法、可変長引数(*argsエンドレスメソッド定義(Ruby 3.0〜)を学びます。

説明

引数名に * を付けると、渡された引数をまとめて配列で受け取れます。個数が決まっていない処理に便利です。

def total(*nums)
  nums.sum
end

puts total(1, 2, 3, 4)     # 10
puts total(10, 20)         # 30
puts total                 # 0(0個でもOK)

呼び出す側で配列を * で展開して渡すこともできます。

def introduce(name, age)
  "#{name}#{age}歳)"
end

data = ["花子", 25]
puts introduce(*data)      # 花子(25歳)

本体が式ひとつだけのメソッドは、def 名前(引数) = 式一行で書けます(エンドレスメソッド定義)。短い計算メソッドをすっきり書けます。

def square(n) = n * n
def greet(name) = "こんにちは、#{name}さん"

puts square(6)             # 36
puts greet("太郎")          # こんにちは、太郎さん

やってみよう

total に渡す個数を変えたり、*data で配列を展開して渡したり、自分の短いメソッドをエンドレス記法で定義してみましょう。

演習

エンドレスメソッド定義で cube(n) を作り、n の3乗(n ** 3)を返すようにしてください。cube(3) の結果を puts で表示します(27 になります)。

ヒント1を見る

def cube(n) = n ** 3 と一行で書けます。

実際に動かしてみよう

下のエディタにRubyを書いて「実行」を押すと、学習用シミュレータが puts / print / p の出力を表示します(本物のRubyではなく、教材の範囲を再現した軽量な自作エンジンです)。配列・ハッシュ・ブロック(each/map/select)・メソッド・クラス・モジュール・例外なども動きます。本文の例を書き換えて動かしてみましょう(gem・Rails・ファイル入出力など一部の機能は対象外です。文字列を伸ばすときは str << も可能ですが、変数に反映されるのは str += です)。

Ruby — ブラウザ内で実行(学習用シミュレータ)

Rubyの教材サブセットを動かす学習用シミュレータを読み込みます(本物のRubyではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。