2015年9月15日火曜日

voidとreturn

プログラミングをやっていてよく見るのがvoidとreturnです。これらはどういう意味なのでしょうか。簡単に言えばvoidは「返り値ないよ」と言う意味です。returnは「返り値あるよ。○○が返り値だよ」と言う意味で使われます。

実際に書いてみる

実際にコードを書いてみてその意味を確かめてみましょう。
class Sample01{
public static void main(String args[]){
        Subsample instancedayo = new Subsample();
    System.out.println(" int x = " + instancedayo.getValueX(5));
        }
}

class Subsample{
int getValueX(int x){  
        return x;
        }
}
上記のプログラムではクラス「Subsample」からインスタンス「instancedayo」を作成しています。これを実行するとx=5と表示されます。




ではクラス「Subsample」にもう少し機能を追加します。
class Sample01{
public static void main(String args[]){
        Subsample instancedayo = new Subsample();
        instancedayo.display(100, 200);
System.out.println(" int x = " + instancedayo.getValueX(5));
        }
}

class Subsample{

int getValueX(int x){  
        return x;
        }

void display(int x ,int y){
       System.out.println(" int x = " + x);
       System.out.println(" int y = " + y);
       }
}
赤い部分が追加された部分です。これを実行するとx=100, y=200, x=5と表示されます。


では、クラス「Subsample」に注目してみてください。
class Subsample{

int getValueX(int x){  
        return x;
        }

void display(int x ,int y){
       System.out.println(" int x = " + x);
       System.out.println(" int y = " + y);
       }
上のほうにはint、下の方にはvoidと書かれていますね。

このintというのはint型(整数型)のデータを返すよ!と言う意味です。 中身にはreturn xと書かれていますが、これはint型のデータxを返しています。これを呼び出すことでint型のデータxの値を取得することができます。

下の方にはvoidと書かれていますが、これは「返り値を返さないよ」と言う意味です。中身を見るとSystem.out.println云々と書かれていますが、これは指定のデータを画面に表示する機能です。これを呼び出すことで指定のデータを表示することができます(=つまりデータを表示するだけであって、なにかのデータを返しているわけではないですね)。

このように何の型のデータを返すのか、それとも返さないで別の操作をするのかをあらかじめ機械に宣言してあげます。このような宣言をしないと機械は理解できないので、エラーになってしまいます。

「呼び出す」とか「値を返す」ってどういう意味?

ただ、「呼び出す」とか「値を返す」と言われてもよくわからないかもしれません。そこで、プログラムのこの部分に注目してみます。
 System.out.println(" int x = " + instancedayo.getValueX(5));
これがどういうコードなのかというと、System,out.println()によって何かを画面(コンソール)に表示するコードです。このコードによって、「 ( 」と「 ) 」に挟まれたモノが表示されます。問題は何を表示するのかということです。

System,out.println()の「 ( ) 」の中身を見てみましょう。
" int x = " + instancedayo.getValueX(5)
と書いてありますね。「 " 」と「 " 」で囲まれた部分はString型のデータと言って、単なる文字列です。文字列というのは例えば「あああああ」や「こんにちは」などの「文字の連なり」です。「 " 」と「 " 」で囲むと、機械はそれを文字列のデータと判断します。

String型データの隣にある「+」も難しくありません。これはint型やlong型など、違う種類の型のデータを繋げて表示したいときに使うものです。

問題は「instancedayo.getValueX(5) 」の部分です。これはインスタンス「instancedayo」の「getValueX」メソッドを使っています。

「getValueX」メソッドはどういうメソッドかというと、入力された数字を「返す」メソッドです。ここではgetValueX(5)という風に、「5」を入力しているので「5」が「返されます」。

 System.out.println(" int x = " + instancedayo.getValueX(5)); のコードを実行すると以下のような結果を得ます。

" int x = " というString型のデータと「instancedayo.getValueX(5)」によって「呼び出された」5が表示されていますね。こういうふうにメソッド「getValueX(5)」を使って、5が返ってくることが、「値が返される」ということです。