一番かんたんなJava入門

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

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

time 2013/03/14

 前回、引数に渡された値が3で割り切れるかどうかを調べるメソッドを作りました。3で割り切れれば戻り値としてtrueを返し、割り切れなければfalseを返すようにし、そのメソッドをif文の条件式の中に入れることで、割り切れる場合と割り切れない場合とに分岐させて結果を出力するプログラムでした。こんなやつです。

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;
   }
}

 一応、思った通りには動いているのですが、mainメソッドの中でif文でわざわざ分岐させているのが、非常にうっとうしいです。mainメソッドというのは極力すっきりさせておく方がプログラム的にはベターです。もっと戻り値の仕組みの理解を深める為にも、このclassを改造したいと思います。
 これが元々のisMultipleOf3メソッドの定義部分です。

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

 しつこいようですが、このメソッドは引数に渡された値が3で割り切れればtrueを返し、割り切れなければfalseを返すメソッドです。前回はその結果のboolean型変数を使って、mainメソッド内でif文で分岐させて「3で割り切れます」とかっていう文字列を作らせていましたが、このメソッド自体に結果の文字列も生成する機能を持たせようと思います。つまり、trueかfalseを返すのではなく、「15は3で割り切れます」みたいな文字列(String型変数)を返すようにします。

sponsored link

Stringを返すメソッド

 戻り値に文字列を返すので、戻り値の型はStringです。前回のは戻り値の型がbooleanだったので、書き換えます。

public static String isMultipleOf3(int n){
      
}

 これで、Stringを戻り値に返すメソッドですよ、という定義になりました。メソッド名が「isMultipleOf3」です。この「is○○○」というメソッド名は戻り値がboolean型のメソッドにつける形なんです(慣習みたいなものです)。戻り値がbooleanじゃないのにこのメソッド名はちょっとおかしいのですが、いいのが思いつかないのでこのまま行かせてください。。
 メソッドの中身は一から作りなおします。まず戻り値に返す文字列を保持するString型変数resultMessageを宣言します。

public static String isMultipleOf3(int n){
     String resultMessage;
     
}

 そのString変数resultMessageに、if文を使って、3で割り切れるかどうかの文字列を入れましょう。

public static String isMultipleOf3(int n){
     String resultMessage;
     if(n % 3 == 0){
          resultMessage = n + "は3で割り切れます";
     }else{
          resultMessage = n + "は3で割り切れません";
     }
}

 そして、その文字列を入れたresultMessageをreturnします。

public static String isMultipleOf3(int n){
     String resultMessage;
     if(n % 3 == 0){
          resultMessage = n + "は3で割り切れます";
     }else{
          resultMessage = n + "は3で割り切れません";
     }
     return resultMessage;
}

 これでisMultipleOf3メソッドの定義はOKです。引数に渡された値(n)が3で割り切れれば、「nは3で割り切れます」という文字列を戻り値として返し、引数に渡された値(n)が3で割り切れなければ「nは3で割り切れません」という文字列を戻り値として返します。
 さて、文字列を返してくるメソッドをどう使えばいいでしょうか?こうしましょう。

public class ReturnTest{
     public static void main(String[] args){
           System.out.println(isMultipleOf3(123456789));
     }
     
     public static String isMultipleOf3(int n){
             /*省略*/
     }
}

 printlnメソッドの引数に、isMultipleOf3メソッドをぶち込みました。こんな場所ででも呼ばれるとreturnされた値に置き換わります。つまり、isMultipleOf3メソッドが返した文字列がprintlnメソッドにより画面に出力されるわけです。上記の例では123456789を渡しています。これを実行すると、

returntest3

 バッチリですね。

戻り値によって変わるそのメソッドの使い方

 前回はisMultipleOf3メソッドはtrueかfalseを返すメソッドだったので、mainメソッド内でその結果から文字列を作る作業をする必要がありましたが、今回の改造版では文字列を返すメソッドにしたことで、このようにmainメソッドでは、単純にその戻り値の文字列を出力させるだけで済みます。そのおかげで何回も連続して使いやすくなりました。こんなこともできます。

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

 これを実行すると、

returntest4

こうなります。
 booleanを返すバージョンと、Stringを返すバージョンと作りましたが、booleanを返すバージョンは、その戻り値を条件分岐に使えるので非常にいろんな使い方ができます。が、mainメソッド内で処理しようと思うと、mainメソッド自体がごちゃごちゃしてしまいます。一方、Stringを返すバージョンは戻り値は文字列なのでそれを出力するぐらいしか使い道はありません。しかし、上記の例のように続けて何回も出力しやすいというメリットもあります。どちらが良いとか悪いとかではなく、自分で戻り値を返すメソッドを作る時は、何を戻り値として返せばそのメソッドを便利に使えるかをよく考えて作りましょう。

 さて、メソッドについて一通り説明したところで、次回は、今まであまり深く考えずに使ってきたmainメソッドについて振り返ります。

専門学校に通うより絶対お勧め!オンラインプログラミングスクールまとめ

sponsored link

Androidアプリを作ろう

コメント

  • booleanを返す・Stringを返す方法、よくわかりました。

    by K €2014/08/13 21:59

  • 戻り値が理解できないと、これ以降このサイトを進めていくのは難しいですか?

    by 匿名 €2014/09/13 22:08

  • 絶対にそんなことないです。
    やってるうちに、「あ、そういうことか」って分かるので、なんとなく分かりながら進んで行けばいいと思います。
    読んだだけで全部理解できる方がおかしいです。
    とにかく何か作ってみることが一番の近道です!

    by nobuo@管理人 €2014/09/14 22:42

  • result = ( n % 3 == 0 )
    の部分、文末の ;(セミコロン) は…?

    by 匿名 €2014/09/23 01:00

  • 抜けてますね。ご指摘ありがとうございます。助かりました。

    by nobuo@管理人 €2014/09/23 02:28

  • ページ頭のReturnTest.javaについて、if文を閉じるカッコが抜けているようです。こまいところですが、ご修正くださいませ。
    毎日少しずつこのホームページで学ばせていただいてます。
    分かりやすくてありがたいです。

    by meme €2015/01/14 13:56

  • >memeさん、
    そういうご指摘は非常に助かります。ありがとうございます。

    頑張ってください!

    by Nobuo@管理人 €2015/01/14 22:34

  • System.out.println(isMultipleOf3(a));
    のところを、
    int型変数aを宣言&初期化した後に、
    isMultipleOf3(a){
    System.out.println(resultMessage);
    とやったら、見事エラーとなりました。
    resultMessageの届く範囲から外れているからでしょうか?

    by 匿名 €2015/06/03 18:24

  • mainメソッドというのは極力すっきりさせておく方がプログラム的にはベターです。もっと戻り値の仕組みの理解を深める為にも、このclassを改造「」たいと思います。

    「」に、

    の抜け(*>_<*)ノ

    by i €2015/07/10 07:18

  • ナイスチェックです。ご報告ありがとうございました。

    by Nobuo@管理人 €2015/07/10 13:21

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入門

COBOLからのJAVA習得