「戻り値」とは、呼び出し元に値を返すもの
…いや、どういうこと!?
これ普通によくわからなくないですか?
まず「呼び出しもと」って何?
「値を返すって」何?
何のために返すの?
もう全部わからないですよね。
そこで今回は、
「呼び出し元に値を返す」
という謎の定義の意味を理解して、戻り値を使いこなせるようになるのを目指します。
戻り値の定義について
戻り値の定義における謎ポイントは3つあります。
こちらです!
- 「呼び出し元」って何なのか?
- 「値を返す」の値って何なのか
- 何のために値を返すのか?
これらに着目して見ていきましょう。
①「呼び出し元」って何?
まず何度も出てきている「呼び出し元」とは、
関数を実行した箇所
になります。
例として以下の戻り値無しのコードを見てください。
<?php
calc(10);
function calc($number) {
echo $number * 3;
}
?>
引数で渡した値を3倍して、画面に出力をしてくれる処理ですね。
これでいうと、
関数を実行した箇所は「2行目のcalc(10);」です。
つまり、言い換えるとこれが関数の呼び出し元に当たります。
②「値を返す」って何?
このとき例えば、
その3倍にされた値が偶数であれば「当たり」、
奇数であれば「ハズレ」を出力する処理を入れたい。
となった場合、どうしたら良いでしょうか?
え、そんなの簡単だよ、
こうすればいいじゃん!
<?php
calc(10);
function calc($number) {
$result = $number * 3;
if ($result % 2 === 0) {
echo '当たり';
} else {
echo 'ハズレ';
}
}
?>
確かに、この書き方でも要件を満たすことはできますが問題があります。
それは「calc」と言う関数は、
計算をするという意味の関数のはずなのになぜか、
当たり外れを判定する処理まで入っていると言う点です。
これだと、
当たりかハズレかなんてどうでも良いから!
3倍して欲しいだけなのに!
と言う場合、この関数を使うことができません。
計算だけしてくれれば良いのに余計な判定の処理まで入っている状況です。
関数のメリットの一つに「色々な箇所で使い回すことができる」と言う点があります。
汎用性を持たせるためにも、関数の中に書く内容は必要最低限のものだけにしておいた方が良いですね。
そこで登場するのが戻り値(return)です!
こう書き換えてみましょう。
<?php
$result = calc(10);
if ($result % 2 === 0) {
echo 'あたり';
} else {
echo 'ハズレ';
}
function calc($number) {
return $number * 3;
}
?>
こうすることで、
calcという関数は値を3倍にするだけになりました。
そして、returnより右側にあるもの全てが以下のように動きます。
呼び出し元:calcメソッド実行場所(2行目)に、
値:returnより右側全部が、
返る:関数実行部分の calc(10) が→ 「$number * 3」に置き換わるイメージ
➡︎ $result = $number * 3;
これが、
呼び出し元(関数実行部分)に値(returnで指定したもの)を返すという意味になります。
③何のために返すのか?
戻り値の仕組みが分かったとして、
結局何のために使うの?使わなきゃいけないの?
という疑問が残ります。
これに関しては、
- 使わなければいけない場合
- 使っても使わなくてもどっちでも要件を満たせる場合
が、ある事をしっておいてください。
これを前提にして、次の事を覚えておくと良いかと思います。
戻り値を使う場合
関数の実行結果をさらに使いたいときに、
returnで呼び出し元(関数実行場所)に値(returnで指定したもの)を返して使うことができる
戻り値を使わない場合
基本的には関数を実行すると、
関数に書いてある内容が最後まで全部実行されるだけ。
関数を起動した結果をさらに使っていくことはできない。
イラストでイメージ!
戻り値(return)を使わずに関数の中に色々と処理を書いてしまうと、今回のように
そこまでやらなくて良いのに…!
と言う事が起きます。
戻り値(return)を使うことで、
メソッドを実行して計算結果だけを取得することができます。
その結果の使い道としては、
- 当たりハズレの判定で使う
- 文字列を結合させる
など自由に使うことができます。
それをイラストでイメージしてみましょう。
「料理を作る関数」cook
というのがあったとします。
関数cookを呼び出す(使用する)と、
「料理を作成して、食べる」
という動きになります。
しかし、このイラストのように関数cookを使って料理をした人は、
- 誰かのために作ってあげたのか
- 冷蔵庫にしまっておくつもりで作ったのか
- 自分で食べるのか
というように色々な使い方をすることができます。
しかし、処理の中に「食べる」ということまで書いてしまうと、
料理を作ったあとはもう自分で食べるしか選択肢が無くなってしまいます。
では、returnを使ったらどうなるでしょうか?
関数cookを実行した箇所に作成した料理が返ってくるイメージです。
そのため、
- 料理を提供する
- 冷蔵庫にしまう
- 自分で食べる
など、その完成した料理を自由に使うことができます。
まとめ
「戻り値」を理解するためにはとにかく、
「return 〇〇」の〇〇が関数実行部分に置き換わるようなイメージを持ってください。
- 「呼び出し元に値を返すもの」← 赤字部分の意味を押さえよう
- 戻り値を使うと、関数の実行結果を後の処理で利用することができる