コード①のようにmainメソッドでaddメソッドを呼び出すし後に、その値を返すというのが理解できません。返すというの返却するということでしょうか。
『返す(return)』の本来の意味は、値を返すのが主題ではありません。
第一に返すものは『処理進行の権限』です。
メソッドの呼び出しを受けると、処理のポイントがそのメソッドへとジャンプします。
つまり、処理がメソッドへと移ります。
その中でreturnに出会うか、メソッドが最後まで進むと、処理のポイントを呼び出し元の位置へとジャンプさせます。
つまり、処理を元の位置へと返します。
返却するのは処理です。
戻り値がある場合はついでにそこに添えて一緒に渡します。
メソッドは呼び出されて処理を受け取るものなので、処理は必ず返さなければ、おかしなことになってしまいます。
(大昔のBASICとかでは、まともに返さずあちこちに飛び回るいわゆるスパゲティコードなんてものがたくさん生まれて悲劇を生みました)
疑問②なぜ、返す必要があるのでしょうか。mainメソッドが中心となって動いていくのに、返却しなくても良くない?といった理解です。
では、なぜ値を返す必要があるのか?
というのは、これは考え方が逆なのです。
値を返さなくてはいけない、のではなく、値を返してほしいとあなたが望んだときに、返すようにするのです。
値を返すか返さないかは、設計の問題であり、そのメソッドにどんな機能を望むのか?という問題です。
『渡した数を足してその値を画面に表示する』という機能のメソッドであれば、返す必要はありません。
『渡した数を足してその値を呼び出し元に返す』という機能のメソッドであれば、返す必要があります。
自分がほしいのはどちらなのか?で、返すかどうかを決めればよいのです。
決め方の指針の1つとして、『機能の粒度は細かい方が使い出がある』というのがあります。
ボタン一つで何から何まで全自動でやってくれる機械があればたしかに便利ですが、
その代わり全自動なのでその用途にしか使えません。
機能別に別れている機械であれば、繋ぎ変えることで、機能を組み替えることができます。
別の用途にも使い回せたりします。
(それも、何方にするかは設計の考え方次第ではありますが。)
例えば、1番のコード
JAVA
1public static int add(int x, int y){
2 int ans = x + y;
3 return ans;
4}
5public static void main(String[] args){
6 int ans = add(100,10);
7 System.out.println("100 + 10 = " + ans);
8}
こちらはadd
メソッドの機能は『与えられた数値を足す』だけです。
今回はそのままmain
メソッドの中でprintln
でコンソールに表示していますが、
その答えを、GUIのウィンドウに表示することもできますし、ネットで対戦相手に送ることも可能です。
一方、2番のコード
JAVA
1 public static void add(){
2 int x = 100;
3 int y = 10;
4 int ans = (x + y);
5 System.out.println(ans);
6 }
7 public static void main(String[] args){
8 add();
9 }
こちらは、add
の機能は『決まった数値を足す。そしてコンソールに表示する』という二つの機能を持っています。
こちらはこれで完結していますので、決まった値を結果をコンソールに表示したい時にしか使うことができません。
足した数値をコンソール以外の場所に表示したいとおもったり、対戦相手に送信したいと思ったら、
このadd
メソッドは使えませんので、別の加算単体のメソッドを作るか、
加算してGUIに表示するメソッド、加算して対戦相手に送信するメソッドと、たくさんのメソッドを作らないとなりません。
複数の機能を持つメソッドを基準にすると組み合わせの数だけ膨大なメソッドを作らないといけなくなります。
1番のような、加算するだけのメソッドであれば、それにGUIに表示するメソッドや対戦相手に送信するメソッドを組み合わせれば、様々な機能を実現できて、使い出があるのです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。