第11講・STEP 02

メソッドの引数について

メソッドを呼び出す時に、後ろについている( )の中に入れる値のことを引数(ひきすう)と言います。今回は、このような引数を受け取って処理するメソッドを作っていきます。

引数は、既にこの入門講座でも散々使っていますね。文字を画面に出力する時です。

System.out.print("おはようございます");

printメソッドは、このように引数に渡された文字列を画面に出力してくれるメソッドです。

引数を受け取るメソッドを定義する

 for文って何?の時に2のn乗を計算するクラスを作りました。今回は2のn乗を計算するメソッドを作ります。

 その前に、例はシンプルな方がいいので、まずは2のn乗ではなく、単純に引数nを2倍した値を出力してくれるメソッドを作ってみます。メソッド名は二倍を意味する「twice」にします。クラス名は計算を意味するcalculateを縮めて「Calcu」にしましょう。

Calcu.java

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

     public static void twice(){

     }
}

 twiceメソッドを定義しています。この枠組みをまずはしっかり理解しましょう。mainメソッドの定義とtwiceメソッドの定義が並んでいる状態です。

 両方ともまだ処理内容の定義が空っぽですが、これを埋めていきます。twiceメソッドは、引数に渡された値を2倍して出力するように定義します。

Calcu.java

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

     public static void twice(int n){
         
     }
}

 メソッドを定義する時に、後ろの( )の中で変数を宣言することによって、その型に合う値を引数として受け取るメソッドになります。このtwiceメソッドを呼ぶには、int型として受け取れる値を1つ渡す必要があります。

 これでtwiceメソッドは引数にint型の値を受け取れるようになりました。( )の中で宣言したnは仮引数(かりひきすう)と言って、受け取った引数をどう処理するのかを定義する為に使います(別に変数名はnじゃなくても何でもいいです)。

 ここでは「○○の2倍は、○○」という風に文字列を出力させます。

Calcu.java

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

     public static void twice(int n){
          System.out.print(n + "の2倍は、");
          System.out.println(n * 2);
     }
}

 これでtwiceメソッドの定義はOKです。もしnが5なら、処理内容が、

Calcu.java

System.out.print("5の2倍は、");
System.out.println(10);

 になるのが分かると思います。

引数を渡して呼ぶ

 では実際にこのメソッドを使ってみましょう。mainメソッドの中でtwiceメソッドを呼びます。

Calcu.java

public class Calcu{
     public static void main(String[] args){
          twice(5);
     }

     public static void twice(int n){
          System.out.print(n + "の2倍は、");
          System.out.println(n * 2);
     }
}

 これを実行すると以下のように出力されます。

実行結果
5の2倍は、10

 このようにメソッドを呼ぶ際に、後ろの( )の中に引数を入れて実行することを「メソッドに引数を渡す」などと表現します。

 他の値も渡してみましょう。

Calcu.java

public class Calcu{
     public static void main(String[] args){
          twice(5);
          twice(65);
          twice(3247);
     }

     public static void twice(int n){
          System.out.print(n + "の2倍は、");
          System.out.println(n * 2);
     }
}

 
 これで実行すると以下のように出力されます。

実行結果
5の2倍は、10
65の2倍は、130
3247の2倍は、6494

 という仕組みを理解しましょう。

 処理内容を定義する時に使う変数を「仮引数」というのに対して、メソッドを呼ぶ時に実際に渡す引数のことを「実引数」と言ったりします。

2のn乗を計算するメソッド

 では、次は2のn乗を計算するメソッドを作りましょう。名前はpowerOfTwoメソッドにします。まずはtwiceメソッドと同じように引数にint型の値を受け取れるように仮引数を宣言します。

Calcu.java

public class Calcu{
     public static void main(String[] args){
          twice(5);
          twice(65);
          twice(3247);
     }

     public static void twice(int n){
          System.out.print(n + "の2倍は、");
          System.out.println(n * 2);
     }

     public static void powerOfTwo(int n){

     }
}

 仮引数の名前が同じ「n」で大丈夫?混乱しないのかな?と思った方、大丈夫です。twiceメソッドの仮引数nのスコープ(変数の有効範囲)は、twiceメソッドの本体の中です。別のメソッドであるpowerOfTwoの仮引数nとは別の変数なので、それぞれ同じ名前を使えます。もちろん違う名前にしてもいいです。

 では、仮引数nを使ってpowerOfTwoメソッドの中身を定義します。

Calcu.java

public class Calcu{
     
           /*省略*/

     public static void powerOfTwo(int n){
          int answer = 1;//-------------------①

          for( int i=0; i<n; i++ ){ 
               answer = answer * 2; //--------②
          } 

          System.out.print("2の" + n + "乗は、");
          System.out.println(answer);//-------③
     }
}

 powerOfTwoメソッドの定義部分は、for文って何?で作った2のn乗を計算するクラスとほとんど同じです。メソッドの中で
①、変数answerを宣言して1を代入し、
②、for文を使ってanswerに2をn回かけて、
③、answerを出力しています。

 この流れがよく分からない人は、もう一度、for文って何?を読んでみてください。

 では、このpowerOfTwoメソッドをmainメソッドの中で引数を渡して呼び出します。せっかくなんで引数を変えて2回ほど呼びましょう。

Calcu.java

public class Calcu{
     public static void main(String[] args){
          twice(5);
          twice(65);
          twice(3247);
          powerOfTwo(3);
          powerOfTwo(10);
     }

     public static void twice(int n){
          System.out.print(n + "の2倍は、");
          System.out.println(n * 2);
     }

     public static void powerOfTwo(int n){
          int answer = 1;

          for( int i=0; i<n; i++ ){ 
               answer = answer * 2;
          } 

          System.out.print("2の" + n + "乗は、");
          System.out.println(answer);
     }
}

 これで実行すると、

実行結果
5の2倍は、10
65の2倍は、130
3247の2倍は、6494
2の3乗は、8
2の10乗は、1024

こうなります。

処理をまとめて再利用する

 for文って何?で作った2のn乗を出力するPowerOfTwoクラスと、今回のCalcuクラスは、書いているコード自体は非常によく似ていますよね。PowerOfTwoクラスはこんなやつでした。↓

PowerOfTwo.java

public class PowerOfTwo{
     public static void main(String[] args){
          int n = 5;
          int answer = 1;

          for( int i=0; i<n; i++ ){ 
               answer = answer * 2; 
          } 

          System.out.print("2の" + n + "乗は、");
          System.out.println(answer);
     }
}

 PowerOfTwoクラスは、mainメソッドの中に全ての処理を書いています。一方、今回書いたCalcuクラスの方はmainメソッドの外でpowerOfTwoメソッドを定義して、それをmainメソッド内で呼び出して使っています。

 こうすることでCalcuクラスのmainメソッドの処理内容がスッキリしているのが分かると思います。

Calcuクラスのmainメソッド(抜粋)

Calcu.java

public static void main(String[] args){
    twice(5);
    twice(65);
    twice(3247);
    powerOfTwo(3);
    powerOfTwo(10);
}

 Calcuクラスがどんな処理を行っているのか一目瞭然ですよね?

 twiceメソッドは、引数の2倍の値を出力するという処理
 powerOfTwoメソッドは、2の引数乗を出力するという処理

 をそれぞれ行っています。

 メソッドを定義する際に、引数を受け取ってその引数なりの処理を行うように定義しておけば、いろんな引数を渡して処理させることが可能です。

 逆に、もし上記のCalcuクラスの処理内容を、自分で作ったtwiceやpowerOfTwoに分けず、全てmainメソッド内に書こうと思えば、重複だらけの非常に読みづらいソースコードになるのが想像できると思います。

 ある一連の処理をメソッドとして定義しておいてそれを再利用するようにすれば、コーディングの量を減らすこともできるし、修正したりするのも非常に楽になります。

 次回は、メソッドの戻り値というのを使ってみましょう。引数と戻り値が使いこなせたらメソッドの扱いは自由自在になりますよ。

目次へ

質問・コメント

読み込み中

この記事についての質問や、学習して気づいたことをお寄せください。

コメントを書く

投稿フォームを準備しています。

コメントと一緒に公開される名前です。
3,000文字以内。パスワードなどの個人情報は書き込まないでください。

コメントは送信後すぐに公開されます。

この記事のコメント

コメントを読み込んでいます。