一番かんたんなJava入門

これからJavaを始めようという人の為の超入門サイトです。丁寧、簡単にこだわった解説なので初心者にぴったりです。

【Java】 メソッドの戻り値について ①

time 2013/03/13

 戻り値についての説明をします。初心者が頭パニックになりがちなところなので丁寧にやります。
 が、言葉でいくら丁寧に説明しても理解不能だと思うので、具体的に戻り値を返すメソッドを作って使ってみましょう。

sponsored link

戻り値を返すメソッドを作る

 引数に渡された値が、3で割り切れるかどうかを判断するメソッドを作ります。大丈夫、簡単です。とりあえずその為のclassを作りましょう。class名は「ReturnTest」
にします。メソッドの名前は「isMultipleOf3」にします。「multiple of 3」で3の倍数という意味です。その前に「is」をつけて「isMultipleOf3」です。ちょっと変な名前ですが、いいのが思いつきませんでした。。まあ英語の勉強だと思って付き合って下さい。

ReturnTest.java

public class ReturnTest{
   public static void main(String[] args){

   }
   public static void isMultipleOf3(int n){

   }
}

 mainメソッドはとりあえず空っぽで、その下に「isMultipleOf3」メソッドの定義です。引数にint型の変数を受け取れるように定義します。この引数に渡された値が3で割り切れるかどうかを判断します。判断するとはどういうことかと言うと、もし引数に渡された値が3で割り切れるならこのメソッドはtrueを返します。もし割り切れなかったらfalseを返します。「返す」の意味は後で分かるので話を進めます。では具体的に、引数に渡された値を仮にnとしてどう処理するかを書いていきます。

ReturnTest.java

public class ReturnTest{
   public static void main(String[] args){

   }
   public static void isMultipleOf3(int n){
      boolean result;
   }
}

 まずは、isMultipleOf3メソッドの中でboolean型の変数resultを宣言しました。boolean型というのはtrueかfalseかどちらかを保持する単純な変数です。ここに、nの値が3で割り切れるならtrueを入れて、そうでなければfalseを入れます。

ReturnTest.java

public class ReturnTest{
   public static void main(String[] args){
      
   }
   public static void isMultipleOf3(int n){
      boolean result;
      result = ( n % 3  == 0 );
   }
}

 「%」は算術演算子の一種で、左オペランドの値を右オペランドで割った余りを算出する演算子です。(参考:演算子って何?)だから、

n % 3

 これはnを3で割った余りの値に置き換わります。もしnが8なら2になるし、nが15なら0になります。余りが0というのは3で割り切れるということですね。

n % 3 == 0

 「==」は比較演算子の一種で、左右のオペランドの値が同じであればtrueに、そうでなければfalseに評価されます。つまり、この式はnが3で割り切れればtrueに置き換わるし、割り切れなければfalseに置き換わりますね。それをboolean型変数resultに代入しています。

result = ( n % 3 == 0 );

 これで、引数に渡された値nが3で割り切れればresultにtrueが代入されて、3で割り切れなければresultにfalseが代入されることになります。ではこの値を返します。

ReturnTest.java

public class ReturnTest{
   public static void main(String[] args){
      
   }
   public static void isMultipleOf3(int n){
      boolean result;
      result = ( n % 3  == 0 );
      return result;
   }
}

 初登場、「return」です。これが返すというやつです。何を返すかというと、

return result;

変数resultを返しています。変数resultには、引数に渡されたnが3で割り切れればtrueが、割り切れなければfalseが入っているんでしたね。これで、このメソッドは引数に渡された値が3で割り切れればtrueを返し、割り切れなければfalseを返すメソッドになりました。
 ところで、返すって一体どこに返すの?それは、そのメソッド自身の場所に返します。・・う~ん、「メソッド自身の場所に戻り値を返す」というのが分かりにくいですね。もうちょっと頑張って話を進めましょう。

戻り値を返すメソッドを使う

 では、このisMultipleOf3メソッドを実際、使ってメソッド自身の場所に戻り値が返ってくるとはどういうことなのか見て行きましょう。

ReturnTest.java

public class ReturnTest{
   public static void main(String[] args){
      int a = 23165247;
   }
   public static void isMultipleOf3(int n){
      boolean result;
      result = ( n % 3  == 0 );
      return result;
   }
}

 3で割り切れるかどうかチェックしたい数字23165247を、変数aに入れます。どんな数字でもいいのですが、あえてパッと見では3で割り切れるか分かりにくい数字にしました。そして、if文の条件式の中で、aを引数に渡してisMultipleOf3メソッドを呼びます。

ReturnTest.java

public class ReturnTest{
   public static void main(String[] args){
      int a = 23165247;
      if( isMultipleOf3(a) ){

      }else{
         
      }
   }
   public static void isMultipleOf3(int n){
      boolean result;
      result = ( n % 3  == 0 );
      return result;
   }
}

 if文というのはまず、条件式が評価されて、それがtrueならばその直後のブロック内が実行されるのでした。(参考:if文って何?)なのでこの形では、まず条件式が評価されます。条件式は、

isMultipleOf3(a)

です。ここでこのメソッドが呼ばれて評価されます。つまり、aが3で割り切れればこのメソッドがtrueに置き換わり、割り切れなければこのメソッドがfalseに置き換わります。この「置き換わる」というのが「メソッド自身の場所に戻り値を返す」ということです。これでこのif文は、aが3で割り切れれば上のブロックを実行し、割り切れなければ下(else)のブロックが実行される状態になりました。ではブロックの中身を入れましょう。

ReturnTest.java

public class ReturnTest{
   public static void main(String[] args){
      int a = 23165247;
      if( isMultipleOf3(a) ){
         System.out.println(a + "は3で割り切れます");
      }else{
         System.out.println(a + "は3で割り切れません");
      }
   }
   public static void isMultipleOf3(int n){
      boolean result;
      result = ( n % 3  == 0 );
      return result;
   }
}

 if文のブロックの中は大丈夫ですね。ではこのプログラムを実行し・・、ちょっと待ったー!もう一つ大事なことがあります。

戻り値の型

 戻り値を返すメソッドを定義する時には、大事な大事な約束事があります。isMultipleOf3メソッドの定義部分をもう一度見てみましょう。

public static void isMultipleOf3(int n){
      boolean result;
      result = ( n % 3  == 0 );
      return result;
   }

 メソッド名の直前に「void」という謎の単語が書いてありますね。今まで意味が分からないまま書いていたと思います。戻り値を返すメソッドを定義する場合は、ここを書き替えないといけません。何に書き換えるかというと、戻り値の型です。このメソッドの場合、「return result;」としているので戻り値は変数resultですね。そしてresultの型はbooleanです。つまり、boolean型の値を戻り値として返すように定義する場合は、「void」の部分を「boolean」に書き換えるんです。

public static boolean isMultipleOf3(int n){
      boolean result;
      result = ( n % 3  == 0 )
      return result;
   }

 これで、戻り値にboolean型の値を返すメソッドの定義はOKです。

ReturnTest.java

public class ReturnTest{
   public static void main(String[] args){
      int a = 23165247;
      if( isMultipleOf3(a) ){
         System.out.println(a + "は3で割り切れます");
      }else{
         System.out.println(a + "は3で割り切れません");
      }
   }
   public static boolean isMultipleOf3(int n){
      boolean result;
      result = ( n % 3  == 0 );
      return result;
   }
}

23165247が果たして3で割り切れるかどうか実行してみましょう。

returntest

 23165247は3で割り切れるみたいです。
 一応、3で割り切れないのも入れてみましょう。aに5を入れて実行すると、

returntest2

 ちゃんと機能してますね。ぜひいろんな値を入れて実行してみて下さい。

「void」の意味

 ところで、今まで意味分からずに使っていた「void」って一体何?ということなんですが、「void」は「このメソッドは戻り値を返しません」という意味のキーワードなんです。メソッドを作るときに戻り値を返さないメソッドにするなら、メソッド名の直前に「void」を入れなければなりません。戻り値を返すメソッドにするなら、その戻り値の型をメソッド名の直前に入れて、命令内容定義ブロックの中で「return 戻り値;」と、しなければなりません。もちろん、returnする値の型とメソッド名の前に書く変数型は同じじゃないと駄目です。コンパイルエラーになります。

check point!

・戻り値を返さないメソッドの定義
 void メソッド名( ){ }
・戻り値を返すメソッドの定義
戻り値の型 メソッド名( ){ return 戻り値 }

sponsored link

Androidアプリを作ろう

コメント

  • >戻り値がbooleanならif文の括弧の中に入れることが出来ます。

    なるほど、そうだったんですね!
    もう一度、演算子って何 を見直したいと思います。
    お返事ありがとうございます。

    by S €2015/03/11 09:38

  • ここでも紹介されている「スッキリわかるjava入門」を読みながら0からやってきました。
    未経験でこういうものをするのも初めてなので全然進んでません。
    本でもわかりにくい説明の時はネットを見たりしてかろうじてわかったつもりで進んでいます。
    戻り値(return)が全然理解できなくてもう完全に止まっています。
    本ではその直後もreturnを使用していて理解しないと進めない感じでしたので今調べています。

    「値を返す」等がよくわかってないのですが、
    基本的に、呼び出しで使用したものは直後勝手に元の場所に戻っていると認識していました(何度も使えるため)
     が「returnを使い呼び出し元へ返す」という作業が出てきました。
    何故返す作業?返して(受け取って)どうするの?voidに至っては返さない?という感じです。

    returnはどのような時に使うのか(使用用途)がどのサイトでも見つけきれませんでした。もし書いていたらすみません…(自分の求めていた説明ではない等で見つかりませんでした)
    「このようなときにreturnを使う」「returnを使うことにより●●(が出来るように)になった」
    ような例え等が欲しかったのですが、言葉足らずでわかりにくくてすみません。

    by ああ €2015/03/12 18:47

  • >ああさん
    returnの前に、メソッドの定義と呼び出しをしっかり理解したら分かると思います。。

    by Nobuo@管理人 €2015/03/14 01:55

  • 指摘ありがとうございます。
    まずそっちをよく理解してみたいと思います‼

    by ああ €2015/03/14 12:51

  • if(isMultipleOf3(a){ A }
    としたときに、戻り値がtrueであればAが実行されるということですが、
    たんにisMultipleOf3(a) としただけでは、「aが3で割り切れるのか、そうでないかがわかる」だけではないのか?というのが疑問です。「戻り値がtrueであればAを実行する」という意味合いまで持つのでしょうか。よろしくお願いいたします。

    by 匿名 €2015/06/03 17:47

  • if(isMultipleOf3(a)){ A }
    としたときに、Aを実行するのはtrueのときであるのかfalseのときであるのか、ということまで定められているのか?という意味です。

    by 匿名 €2015/06/03 17:49

  • そもそもの質問ですみません。
    「int n」のnにはaの23165247を代入?しているのかと思いますが
    この場合int n=23165247という定義がないのに
    なぜ成り立っているのでしょうか?
    isMultipleOf3(int n)がそれにあたるのでしょうか??

    by T €2015/12/24 18:00

  • >Tさん
    メソッドの引数についてhttp://nobuo-create.net/java-beginner-12/をよく読んで理解して下さい。

    by Nobuo@管理人 €2015/12/24 20:34

  • boolean型についてですが、これはint型でも良い気がしています
    容量の節約でしょうか?

    by はる €2016/07/16 23:23

down

コメントする



CAPTCHA


一番かんたんなJava入門

Androidアプリの作り方

忘備録

私の作ったAndroidアプリ

私の作ったWordPressテーマ

プロに教わるオンライン学習

管理人

Nobuo_CREATE

Nobuo_CREATE

WordPressテーマPrinciple、マテリアルを作ったり、Androidアプリを作ったり、Java入門サイトを作ったり、本を書いたりしています。どうぞよろしく。 [詳細]



sponsored link

オススメ書籍

[オススメpoint]

 この本は全く何も分からない初心者の方にお勧めです。プログラミングをするには覚えなければならない事が無茶苦茶いっぱいありますが、この本は教えてくれる順番、その構成が素晴らしいです。RPGのゲームを作るというストーリーにのっとってちょっとずつ難しいことを教えてもらえます。
 無機質で膨大なデータが載っているような本は読む気にならないという方は、こういうストーリー仕立ての本でチャレンジしてみてはいかがでしょうか?(注:RPGを作る為の本ではありません。)

[オススメpoint]

 ある程度、Javaを読み書きできるようになったら、オブジェクト指向について学ぶべきです。本書は、抽象的で分かったような分からんようなオブジェクト指向について、非常に分かりやすい例を出して説明してくれています。オブジェクト指向とは何なのか?という本質を掴むのにこれほど適した本はないと思います。オブジェクト志向の理念を理解できれば、より効率のいいコードをより楽に書けるようになるはずです。Java上級者を目指すなら必読の一冊!

只今、急拡大中

ゲームを作りたい人専門

個人フットサル予約サイト

ガチ専門

JavaからのRuby on Rails入門

JavaからのRuby on Rails入門