バナー画像

オブジェクト指向言語Rubyで新しいメソッドを作った際、returnでその戻り値を指定します。他のプログラミング言語を習った方ならreturnの使い方を知っているかもしれません。しかしRubyのreturnは省略可能だったり、複数の戻り値を指定できるなど、Ruby独特の使い方が可能です。

今回はRubyでメソッドの戻り値の指定に使用するreturnの使い方について解説します。

メソッドの戻り値とは

Rubyのプログラムは、オブジェクトである変数とそれを扱うメソッドで構成されています。そして、標準でも多くのメソッドがあり、それだけでもプログラムが組めますが、他のプログラミング言語の関数のように新しいメソッドを作ることも可能です。

もし独自のメソッドを作った際、そのメソッドの実行結果を変数などにして、元のプログラムに戻すのが一般的です。Rubyの場合はメソッドの戻り値がこれにあたります。

次からRubyにおける戻り値の特徴を紹介します。

戻り値とは

戻り値とはプログラムから関数やメソッドを呼び出した際に受け取る値のことです。C言語のような手続きを記述するプログラム言語では、「変数 = 関数名」と記述しますが、=を介して変数に入る値が関数の戻り値です。

Rubyにおけるメソッドの戻り値も使い方は同じです。例えば次のようなプログラムを実行した場合、変数valにはMathモジュールにあるsinメソッドの戻り値が代入されます。

val = Math.sin(Math::PI/2)

戻り値の書き方

多くのプログラムに影響を与えたC言語では、関数の戻り値をreturnで指定していました。今使われている多くのプログラミング言語がC言語の影響を受けていることもあり、多くのプログラミング言語の戻り値にreturnが使われます。

C言語のreturnと全く同じではありませんが、Rubyでも戻り値の指定にretuenを使用します。

C言語のreturnの例

int calc(int in1) {
  return( in1 * in1 );
}

上記と同じ機能をRubyで作成した例

def calc(in1)
  return( in1 * in1 )
end

上記のC言語とRubyのreturnの使い方を見比べてもらえれば解るように、Rubyのreturnは他のプログラム言語と同じように使えます。

Rubyの戻り値はオブジェクト

先ほど紹介したようにRubyのreturnは他のプログラム言語と同じように使えますが、その機能は違います。例えばRubyのプログラムでは全ての要素をオブジェクトとして扱うことから、returnの戻り値もオブジェクトです。そのため戻り値として複数の値を指定することも可能です。

もちろん戻り値に配列やハッシュを1つだけ指定できます。Rubyのretuenでは数字や文字列などの戻り値を複数指定し、それを配列として受けるといったことも可能です。

returnで複数の戻り値を指定した例

def res()
  a = 2
  b = 'test'
  c = true
  return a, b, c
end
out = res
p out  # "[2, "test", true]"を表示する

Rubyではreturnを省略できる

Rubyではメソッドの最後に記述した式が戻り値になります。そのため、returnを省略した書き方が可能です。例えば、先ほどの例は次のように書き換えられます。

returnを省略したメソッドの例

def calc(in1)
  in1 * in1
end

retuenの文法

returnの機能は、引数で指定した式の値をメソッドの戻り値として返し、メソッドを終了させるの2つです。そして引数に複数の値を指定した場合は、戻り値を配列にして返します。またreturnで引数を省略した場合はnilを返します。

returnの文法

return [式 [, 式 …. ] ]

retuenの使用例

先ほどC言語のreturnの使い方を比較してRubyのreturnについて紹介しましたが、単純にreturnだけ使われるケースは多くありません。実際のプログラムではif構文の中で使われたり、returnを省略する書き方もよく使われます。

次から実際のプログラムで使われることの多いreturnの使用例を紹介します。

if構文に組み合わせる

先ほど説明したようにreturnの機能は、戻り値を返す機能とメソッドを終了させる機能の2つです。そしてメソッドを終了させる機能を利用すれば、ifとelseで別の戻り値を返すプログラムを作れます。

例えば引数を評価して3つの戻り値のどれかを返すメソッドを作る場合、下記のようにif構文による条件毎にreturnを使って記述が可能です。

if構文とreturnの組み合わせの例

if 条件1 then
  return 戻り値1
else if 条件2 then
  return 戻り値2
else
  return 戻り値4
end

複数の戻り値を返す

先ほど紹介したようにRubyのreturnは複数の戻り値を指定できます。そして複数の戻り値を配列で受け取りますが、Rubyのプログラムの書き方によっては複数の戻り値を複数の変数で受ける書き方も可能です。

例えば下記のように3つの変数を作るメソッドがあったとします。returnで3つの変数を戻り値に指定することで、配列として受け取れます。

複数の戻り値を返すメソッドの例

def res()
  a = 2
  b = 'test'
  c = true
  return a, b, c
end
out = res
p out  # "[2, "test", true]"を表示する

上記のメソッドを配列ではなく変数として受ける書き方も可能です。

複数の戻り値を受けるプログラムの例

def res()
  a = 2
  b = 'test'
  c = true
  return a, b, c
end
v1, v2, v3 = res
p v1  # 2を表示する
p v2  # "test"を表示する
p v3  # trueを表示する

変数と配列の組み合わせで受け取る

先ほどRubyのreturnで複数の文字列を指定した場合、配列または複数の変数で受け取れると説明しましたが、変数と配列の組み合わせで受け取ることも可能です。

例えば、4つの値を返すメソッドを作成し、最初の戻り値を変数に、残りを配列で受け取る処理を作る場合、次のように書くことが可能です。この場合、配列で受け取る変数に「*」を付けて指定します。下記に変数numと配列arrで戻り値を受け取るRubyのプログラムの例を紹介します。

戻り値で変数と配列で受け取る例

def res()
  a = 10
  b1 = 1
  b2 = 'test'
  b3 = true
  return a, b1, b2, b3
end
num, *arr = res
p num  # 10を
p arr  # [1, "test", true]を表示する。

なお戻り値の組み合わせで「*arr, num」と指定することも可能です。ただし「*arr1, *arr2」という組み合わせはできないので注意してください。

Rubyの戻り値を省略した場合の注意点

Rubyではメソッドの戻り値を指定する際にreturnを省略した書き方が可能です。そして多くのケースでreturnをそのまま省略しても期待通りに動作します。

例えば、下記のようなif構文を使ったメソッドは、そのままreturnを省略できます。

returnを使ったメソッドの例

def check_false1(flg)
  if flg
    return "OK"
  else
    return "NG"
  end
end

returnを省略したメソッドの例

def check_false1(flg)
  if flg
    "OK"
  else
    "NG"
  end
end

しかしそのままreturnを省略できないケースもあります。例えばif演算子を使ったケースです。returnを省略してリファクタリングする場合は十分注意してください。

if演算子を使ったメソッドの例

def check_false2(flg)
  return "OK" if flg
  return "NG"
end

上記の例でreturnを省略すると、flgがtrueでメソッドが終了する、というreturnの機能が無くなるので、最後に評価した結果が”NG”となり、実行結果が必ずNGになります。このようにreturnには戻り値を指定する機能とメソッドを終了させる機能の2つがあることを理解して使ってください。

まとめ

これまで紹介したようにreturnの機能は、メソッドの戻り値を指定する機能とメソッドを終了させる機能の2つです。そのためメソッドの最後かif構文の中で使用します。さらにRubyのreturnに複数の戻り値を指定することが可能で、その場合戻り値を配列として受け取れます。

なおメソッドの戻り値は、returnを省略することが可能ですが、returnを使った場合と全く同じではないので注意してください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。