引数と戻り値
引数と戻り値
Javaの勉強し始めて、引数と戻り値という単語の理解に苦しんでいます。
メソッドというブラックボックス(関数的なもの)に、引数を入れたら、戻り値が帰ってくるよ。という理解であってますか?
合っていれば、引数とメソッドを定義する必要性は理解できるのですが、戻り値も定義しなきゃいけない理由ってなんですか?
・戻ってくる場所を与えなきゃいけない
・戻ってきた値を次に使いたいから
などでしょうか?
Javaの勉強し始めて、引数と戻り値という単語の理解に苦しんでいます。
メソッドというブラックボックス(関数的なもの)に、引数を入れたら、戻り値が帰ってくるよ。という理解であってますか?
合っていれば、引数とメソッドを定義する必要性は理解できるのですが、戻り値も定義しなきゃいけない理由ってなんですか?
・戻ってくる場所を与えなきゃいけない
・戻ってきた値を次に使いたいから
などでしょうか?
関数は、数学に出てくる関数です。
xの値によって、yが決まる y = f(x) とか書くアレです。
なので、関数の基本は 引数(上記ならx) と 戻り値(上記ならy)がありました。
メソッドは、オブジェクトにアクセスするインタフェースですので、
形は関数のようですが、引数以外に、オブジェクトの状態も関係してきます。
なので、
・引数を設定しない使い方もある
・戻り値を設定しない使い方もある
というものです。
どちらも設定しないというのも当然あります。
「戻り値も定義しなきゃいけない理由」というものはありません。
オブジェクトの状態を知りたいときや、
メソッドの実行結果を知りたいときなど、
必要に応じて定義すればいいだけです。
@hiroki-shosinsher
Questioner
分かりやすく説明してくださってありがとうございます!
メソッドというのは「処理」あるいは「仕事」です。
仕事をするために必要なものが「引数」で、仕事をした結果として得られるものが「戻り値」です。
そして仕事の中には引数や戻り値を必要としないものもあります。
(ただし、戻り値として「何も返さない」をvoidと定義することにはなります)
(引数と戻り値を含めて)メソッドを定義するということは、どんな仕事をするのか決めるということです。そのメソッドはどんな仕事をするもので、仕事をするために何が必要で(引数)、結果(戻り値)として何を返すか(あるいは返さないのか)、というのを決めます。
ですので、「戻り値も定義しなきゃいけない」ということではなく、メソッドという仕事の単位を決める要素として引数と戻り値を定義する必要があります。
戻ってきた値を次に使いたいから
これは、そのとおりだと言えます。
プログラミングは仕事を繋いでいくものです。ですので、相手が仕事の結果として何を返すかわからない(戻り値の定義が不明)だと、次の仕事をする人が困ります。
「私は仕事の結果としてコレを返すよ」と明確にすることで「ではそれを受け取って次にこの仕事をしよう」という繋がりになります。このように仕事をつなげていくために戻り値の定義が必要になります。
@hiroki-shosinsher
Questioner
分かりやすく説明してくださってありがとうございます!
「メソッドというブラックボックス(関数的なもの)に、引数を入れたら、戻り値が帰ってくるよ」との御理解で合っています。
イメージは以下です。
入力(引数) → [ メソッド ] → 出力(戻り値)
戻り値を定義する理由は、「このメソッドは、何を返すのか」を約束するためです。
Javaは型に厳しい言語です。
もし戻り値を定義しなかったら、
・何が返ってくるの?
・そもそも返るの?
・使っていいの?
が分からなくなって、プログラム全体が混乱します。
「戻ってきた値を次に使いたいから」は正解です。
戻り値があるから、変数に入れたり、別の計算に使えたりします。
これが戻り値の存在意義です。
「戻ってくる場所を与えなきゃいけない」は少しずれます。
正確には、「戻る場所」ではなく、「戻る値の型」を決めます。
戻り値がないメソッドもあります(void)。
void は、「このメソッドは 何も返しません」という宣言になります。
@hiroki-shosinsher
Questioner
分かりやすく説明してくださってありがとうございます!