Thinkers'Studio
JavaとC言語の自習ツール
メソッドからの return に関するTips
 今回は、return 文について少し整理したいと思います。
 メソッドは、終わりの } に達すると呼び出し元に戻ります。 return 文を使うと、その場で呼び出し元に戻ります。

return の後ろの式

 後ろの式を書かないときは、何の値も返さずに戻ります。
  例)return;
 後ろに式を書くと、その評価結果を持ち帰ります。
  例1)return -1;                   //定数値を返す
  例2)return width;                //変数の値を返す
  例3)return y+"年"+m+"月"+d+"日"; //演算結果を返す
  例4)return euclid( b, a % b );   //メソッドを実行しその結果を返す

 戻り値が void のメソッドでは、必要があるときだけ return; を書きます。 return 式; とすると、コンパイル・エラーになります。
 逆に、値を返すメソッドでは、return 式; で何らかの値を返さなければ、コンパイル・エラーになります。
 return の後ろの式を ( ) で囲む形をよく見かけますが、その必要はありません。
 また、ひとつのメソッドに return 文が複数あっても構いません。

オブジェクト(配列やクラスのインスタンスなど)も returnできる

 「配列をメソッドの戻り値とするには」 で示したように、配列を return することもできます。
 また、多くのクラスに用意されているメソッド toString( ) は、戻り値として Stringオブジェクトを返します。

戻り値の型と一致しない型を returnしようとしたとき

 精度が広くなる方向であればエラーにはならず、メソッドの戻り値型に型変換されます。
 精度が落ちる場合はコンパイル・エラーになるので、キャストを使って明示的に型変換する必要があります。
//int-->double
static double extend( int n ) {
    return n;      //キャストしなくてもエラー無し
}
//double-->int
static int cutoff( double d ) {
    return (int)d; //(int)がないとコンパイルエラー
}
 ただし、暗黙の型変換が起こると分かっている場合でも、キャストを使って明示する方が曖昧さのないコードとなります。

[ 関連記事 ] 上の例1〜例4 の return文は、下記の Tips で参照できます。
例1),例4)最大公約数, 例2)コンストラクタやゲッター, 例3)n日後の日付を調べる


(今週のクイズは簡単な練習です)
 奇数かどうかを判定して、true または false を返すメソッドを考えてみましょう。
   (答えは、次の Java の Tips で ・・・ )
前回のクイズの答え: Calendarクラスの addメソッドを使う。 (前回の問題を見る
(例)2020/07/24 の -1000日後の日付を表示するには例えば次のようにします
      Calendar cal = Calendar.getInstance();
      cal.set( 2020, 7-1, 24 );
      cal.add( Calendar.DAY_OF_MONTH, -1000 );
      System.out.println( cal.get(Calendar.YEAR)+"/"+
          (cal.get(Calendar.MONTH)+1)+"/"+cal.get(Calendar.DATE) );
getInstance でカレンダオブジェクトを用意し、set で 2020/7/24 を設定、add で-1000日後の日付に変えて表示しています。 Calendar.MONTH は 0 からなので月の設定時には -1 が、表示時には +1 が必要です。