Java メソッドに戻り値を返させてみよう。

Javaのメソッドは戻り値(もどりち)を返すことができます。Javaの場合、戻り値とはメソッドの呼び出し元に、メソッドで行った処理の結果として返す値のことです。return を使うことから、別名でリターン値とも言われています。

Javaの場合と書いたのは、他のプログラミング言語では、メソッドではなく関数やサブルーチンということがあるからです。

戻り値は処理の結果を文字列や数値で返すこともありますし、true/false(真偽)などの状態を返すこともあります。例えば「データベースに接続できたかできなかったか」、「ログインしているかしていないか」などです。

また前回説明したように、メソッドに戻り値が無い場合は、戻り値の型に void と書き、return を省略できます。

今回は前回のプログラムを少し変更して、メソッドに戻り値を返させてみましょう。プログラムの実行結果は同じですが、メソッドが戻り値を返すということがどんなものか理解できます。


【1】sample02 フォルダをフォルダごとコピーして、sample03 フォルダを作ります。

java-204.gif


【2】sample03 の PersonTest.java を以下のように修正します。

java-205.gif

保存先 C:\java\sample03
ファイル名 PersonTest.java

class Person {
  String name;
  int age;
  String address;

  Person(String _name, int _age, String _address) {
    name = _name;
    age = _age;
    address = _address;
  }

  String say(){
    String str = "私の名前は" + name + "です。年齢は"
    + age + "才で、住所は" + address + "です。";
    return str;
  }

}


class PersonTest {
  public static void main(String[] args) {
    Person taro = new Person("太郎", 21, "東京都港区");
    System.out.println(taro.say());

    Person hanako = new Person("花子", 18, "北海道札幌市");
    System.out.println(hanako.say());
  }
}



【3】コマンドプロンプトを起動して、カレントディレクトリを sample03 にします。

java-206.gif


【4】javac PersonTest.java と入力し、コンパイルします。

java-207.gif

*フォルダごとコピーしたので前回のクラスファイルが残っています。コンパイルを忘れると、ソースファイルは修正していても、前回のプログラムが実行されますのでご注意ください。コンパイルするとクラスファイルは上書きされます。


【5】java PersonTest と入力し、プログラムを実行します。データが表示されたら成功です。

java-208.gif


【解説】

前回と今回ではプログラムの実行結果は同じですが、メソッドの働きは大きく異なります。前回はメソッドが画面への出力まで行っていました。今回はメソッドは処理の結果を呼び出し元に返すだけで、画面への出力は呼び出し元で行っています。


(1)まずメソッドの定義の復習です。メソッドの戻り値の型と、return で返す戻り値の型は一致させます。

戻り値の型 メソッド名(仮引数のリスト){
  内容
  return 戻り値;
}


(2)上記の基本形をふまえてメソッド say() を見ると、処理の結果リターンされるのは、フィールドを使って組み立てた文字列です。だからメソッドの戻り値の型は、Stringクラス型になります。

String say(){
  String str = "私の名前は" + name + "です。年齢は"
  + age + "才で、住所は" + address + "です。";
  return str;
}

*Stringクラス型は文字列定数で、一度設定した文字列は変えないときに使います。文字列が更新される場合は、StringBufferクラスを利用します。StringBufferクラスについてはまたの機会に解説します。


(3)上記の str はStringクラス型の変数として宣言し、文字列を代入した後、リターンで str を返しています。つまり str に代入されていた文字列が、呼び出し元に返されます。

* str は参照型なので実際には値ではなく、値がある場所を示す参照情報が入っていますが、ここでは話しをわかりやすくするため、代入と書いています。今の段階では難しく考えなくてかまいません。


(4)呼び出し元のクラスでは、以下のようにメソッドを呼び出しています。

System.out.println(taro.say());

taro.say() は インスタンス名.メソッド名() の形ですね。メソッドの呼び出し部分である taro.say() が戻り値に置き換わると考えると理解しやすいです。

System.out.println(taro.say());

System.out.println(私の名前は太郎です。年齢は21才で、住所は東京都港区です。);
↓文字列ですから「"」ダブルクォーテーションで囲みます。
System.out.println("私の名前は太郎です。年齢は21才で、住所は東京都港区です。");

メソッドの戻り値が返ってくるので、それを println() メソッドの引数とすることで、呼び出し元で画面に出力しているわけです。


前回のような「戻り値を返さないメソッド」と、今回のような「戻り値を呼び出し元で利用する」という二通りのパターンがつかめたらいろんなプログラムが書けるようになりますよ。


スポンサードリンク

スポンサードリンク






Java初心者入門講座TOPへ