一番かんたんな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アプリを作ろう

コメント

  • String は文字列型の戻り値という事ですが、
    int n の n は整数型ですよね?
    resultMessageは文字型。

    resultMessage = n + “は3で割り切れます”; で
    resultMessage = 整数 + 文字列 としても、
    コンパイルエラーにならずに実行できるのはなぜなのでしょう?

    by 眠り王 €2015/08/05 15:02

  • 文字列と数値の足し算(連結)をご覧になって下さい。

    by Nobuo@管理人 €2015/08/05 15:45

  • 初めてコメントさせていただきます。Androidでアプリを作りたくて色々調べてるうちにここにたどり着き、順番に勉強させていただいています。
    説明の流れが分かりやすくて嬉しいです。
    自分は、
    →本文中の「~~というプログラムを作ってみましょう/改造してみましょう」というところまで読む
    →とりあえず自分でやってみる
    →コンパイルエラー等が出て、わからなくなったところで本文に戻る
    みたいな利用の仕方をしているのですが、今回のisMultipleOf3メソッドで
    public static String isMultipleOf3(int n){
    if(n%3 == 0){
    return n + “は3で割り切れます”;
    }else{
    return n + “は3で割りきれません”;
    }
    というように、String変数を使わずにやってしまいました。
    コンパイルも実行もうまくいきましたが、見やすさの観点から言うとこの書き方はやめたほうがいいのでしょうか。

    加えて、細かなことで恐縮なのですが、本文中の一枚目のスクリーンショットのあとにおいて、

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

    この部分の最後の一行でメソッド名が微妙に間違ってる(sがaになってる?)気がします。

    長々と失礼しました。

    by 匿名希望 €2016/07/27 11:59

  • >コンパイルも実行もうまくいきましたが、見やすさの観点から言うとこの書き方はやめたほうがいいのでしょうか。
    自分で見にくくなければ問題はないと思います。ただ個人的にはif文の中でreturnするのは好きじゃないです。(^^;)

    >この部分の最後の一行でメソッド名が微妙に間違ってる(sがaになってる?)気がします
    ありがとうございます。細かい指摘は大歓迎です。

    by Nobuo@管理人 €2016/07/27 12:19

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