多重代入を使って複数の戻り値を取得する

return 文などを使って戻り値を呼び出し側に返す場合、戻り値として返すことが出来るオブジェクトは 1 つだけです。ただオブジェクト自身はどのようなオブジェクトでも返すことができますので配列オブジェクトを返すこともできます。ここでは Ruby のメソッドで多重代入を使って複数の戻り値を取得する方法について解説します。

(Last modified: )

戻り値に配列オブジェクトを設定する

メソッドからの戻り値には配列オブジェクトを指定することもできます。

def メソッド名(変数1, 変数2, ...,)
  実行する処理
  実行する処理

  return [要素1, 要素2, ...]
end

戻したいオブジェクトを要素とする配列を作成し、戻り値と指定することで結果的に複数のオブジェクトを戻り値として返すことが可能です。また上記は次のように記述することも可能です。

def メソッド名(変数1, 変数2, ...,)
  実行する処理
  実行する処理

  return 要素1, 要素2, ...
end

return 文の後に複数のオブジェクトをカンマ(,)で区切って記述すると、記述されたオブジェクトを要素として持つ配列が記述された場合と同じ扱いになります。

多重代入による受け取り

メソッドから配列オブジェクトを呼び出し元に返すと、メソッドの呼び出し側でいったん配列オブジェクトを受け取ったあとで配列から要素を取得することもできます。ただ Ruby では多重代入という構文が用意されていますので、多重代入を使うことで複数の変数に一度に戻り値を代入することができます。(多重代入については「多重代入」を参照して下さい)。

def calc(num1, num2)
  return num1 + num2, num1 - num2
end

plus, minus = calc(10, 25)

上記では return の次に記述された num1 + num2 及び num1 - num を要素として持つ配列オブジェクトが戻り値として返されます。呼び出し元では多重代入を使って戻り値の値を変数「plus」と変数「minus」に代入しています。

このように戻り値に配列を使用することと、メソッド呼び出し側で多重代入を使用することで、複数の戻り値をメソッド呼び出し側で受け取ることが可能になります。

サンプルコード

では簡単なプログラムで確認してみます。

# encoding: UTF-8

def keisan(num1, num2)
  puts("num1 = " + num1.to_s)
  puts("num2 = " + num2.to_s)

  return num1 + num2, num1 - num2
end

plus, minus = keisan(10, 25)

puts("加算の結果:" + plus.to_s)
puts("減算の結果:" + minus.to_s)

下記のように実行して下さい。

多重代入を使って複数の戻り値を取得

-- --

Ruby のメソッドで多重代入を使って複数の戻り値を取得する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。