.net column

.NET開発者のためのブログメディア
プラン

Rubyで複数の変数に代入できる?複数戻り値の取得方法を解説

2020年09月04日
SE
Rubyの変数代入がよく分かりません。教えていただけますか。
PM
分かりました。Rubyの変数代入の方法を詳しく見ていきましょう。

Rubyでの複数戻り値の取得について

今回は、Rubyでの複数戻り値の取得方法について説明します。Rubyには多重代入という機能があります。この機能を利用すれば、戻り値が複数ある場合、呼び元で複数の変数に代入できます。

Rubyでの複数戻り値の取得方法に興味のある方はぜひご覧ください。

多重代入とは

Rubyの多重代入とは、複数の式または配列から同時に変数に代入することです。

実際のソースコードを見てみましょう。

実行結果は以下のようになります。

このように、複数の式または配列から同時に代入できます。

Rubyでは、関数の戻り値を複数の式または配列にして、呼び出し側で多重代入すれば、複数戻り値を代入できます。

また、多重代入については、様々な記述方法やルールがあり、代入の振る舞いが変わります。関数の複数戻り値とあわせて、詳細は以降で説明します。

複数戻り値の代入

Rubyでは、関数の戻り値を複数の式または配列にして、呼び出し側で多重代入すれば、複数戻り値を代入できます。ここからは、複数戻り値の代入の方法を説明していきます。

基本形(左辺と右辺の要素数が同じ)

左辺と右辺の要素数が同じ場合、それぞれの変数に同時に代入されます。

実行結果は以下のようになります。

上記は左辺と右辺の要素数が一致しているシンプルなケースです。Rubyでは、左辺と右辺の要素数が一致していなくても構いません。

以降の説明では、簡略化のため、関数から配列が返却されたと仮定して、
val1, val2, val3 = [ 1, 2, 3 ] のように記述します。

左辺の変数が1つの場合は配列となる

左辺の変数が1つの場合、すべての要素を持つ配列となります。

実行結果は以下のようになります。

配列なので、val1[0]のように、インデックスでアクセスできます。このように、左辺の変数が1つの場合、すべての要素を持つ配列となります。

左辺の要素数<右辺の要素数の場合は残りの要素は捨てられる

左辺の要素数 < 右辺の要素数 の場合、残りの要素は捨てられます。

実行結果は以下のようになります。

左辺の要素数 < 右辺の要素数 なので、右辺の残った要素(この場合3)は捨てられることが分かります。

左辺の要素数>右辺の要素数 の場合は残りの要素はnilになる

左辺の要素数 > 右辺の要素数 の場合、残りの要素はnilになります。

実行結果は以下のようになります。

左辺の要素数 > 右辺の要素数 なので、val4はnilになることが分かります。

もちろん、戻り値が配列でない場合も、残りの要素はnilになります。

実行結果は以下のようになります。

変数に*をつけると配列変数になる

変数に*をつけると配列として取得します。

実行結果は以下のようになります。

変数と配列変数を組み合わせることで、以降の要素を配列として取得します。

実行結果は以下のようになります。

変数と配列変数を組み合わせることで、以降の要素を配列として取得することが分かります。

残りの要素がない場合はnilではなく空配列[]になる

残りの要素がない場合は、nilではなく空配列[]になります。

実行結果は以下のようになります。

*val2に代入する要素がないので、空配列[]になります。

配列変数は最後でなくてもよい

配列変数は最後でなくてもよくて、最初に記載することもできます。

実行結果は以下のようになります。

また、配列変数は中ほどに記載することもできます。

実行結果は以下のようになります。

このように、配列変数は最後でなくてもよくて、最初に記載することもできます。

配列を読み捨てる

*に変数名を付与しないと、読み捨てられます。

以下は、先頭だけ取得して以降は読み捨てるサンプルです。

実行結果は以下のようになります。

末尾を読み捨てる場合のみ、*を省略できます。(上記の val2 のケース)

以下は、末尾だけ取得して他は読み捨てるサンプルです。

実行結果は以下のようになります。

以下は、先頭と末尾だけ取得して他は読み捨てるサンプルです。

実行結果は以下のようになります。

また、*は引数を読み捨てるのにも利用します。

この場合、呼び元で指定した引数はすべて無視します。

配列変数の優先度は低い

左辺の要素数 > 右辺の要素数 の場合、配列変数があれば空配列になります。

実行結果は以下のようになります。

配列変数は2つ以上指定できない

配列変数を2つ以上指定すると、syntax errorとなります。

配列変数は1つまでにしましょう。

ネストした配列の要素を代入できる

括弧により、ネストした配列の要素を代入できます。

実行結果は以下のようになります。

このように、括弧により、ネストした配列の要素を代入できます。

SE
Rubyの代入はとても柔軟性に富んだソースコードなんですね。
PM
理解いただけたようで何よりです。複数の式から代入も可能ですので実際に書いて理解を深めていきましょう。

Rubyの戻り値に対する理解を深めよう

いかがでしたでしょうか。Rubyの多重代入を利用すれば、戻り値が複数ある場合に、呼び元で風数の変数に代入できます。

左辺と右辺の要素数の差異などで、Rubyの代入の振る舞いが変わります。ぜひご自身でRubyのソースコードを書いて、理解を深めてください。

 


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)