2019/02/06
メソッドを呼び出す時に、後ろについてる( )の中に入れる値のことを引数(ひきすう)と言います。既にこの入門講座でも散々使ってますね。文字を画面に出力する時です。
System.out.print(“おはようございます”);
printメソッドは引数に渡された文字列を画面に出力してくれるメソッドです。
今回は、このような引数を受け取って処理するメソッドを作っていきます。
sponsored link
引数を受け取るメソッドを定義する
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型の変数を受け取れるようになりました。( )の中で宣言したnは仮引数(かりひきすう)と言って、受け取ったint型変数を仮にnとしてメソッドの中身を定義していく為に使います(別に変数名は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なら、処理内容が、
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);
}
}
これを実行すると以下のように出力されます。
このようにメソッドを呼ぶ際に、後ろの( )の中に引数を入れて実行することを「メソッドに引数を渡す」などと表現します。
他の値も渡してみましょう。
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); } }
これで実行すると以下のように出力されます。
- メソッドを定義する時に、( )の中で変数(仮引数)を宣言することで、そのメソッドは引数を受け取ることができるメソッドになる(厳密には受け取らなければならなくなる)。
- メソッドの処理内容を定義する際に、仮引数を使って、受け取った引数をどう処理するかを定義する。
- メソッドを使う時には、後ろの( )の中に引数を入れて呼ぶ(引数を渡す)。
という仕組みを理解しましょう。
処理内容を定義する時に使う変数を「仮引数」というのに対して、メソッドを呼ぶ時に実際に渡す引数のことを「実引数」と言ったりします。
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メソッドの定義部分{ }の中だけなので、それ以外の場所で同じ変数名を使っても完全に別物として扱うことができます。もちろん違う名前にしてもいいです。
では、仮引数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); } }
これで実行すると、
こうなります。
処理をまとめて再利用する
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メソッド
public static void main(String[] args){ twice(5); twice(65); twice(3247); powerOfTwo(3); powerOfTwo(10); }
Calcuクラスがどんな処理を行っているのか一目瞭然ですよね?
twiceメソッドは、引数の2倍の値を出力するという処理
powerOfTwoメソッドは、2の引数乗を出力するという処理
をそれぞれ行っています。
メソッドを定義する際に、引数を受け取ってその引数なりの処理を行うように定義しておけば、いろんな引数を渡して処理させることが可能です。
逆に、もし上記のCalcuクラスの処理内容を、メソッドを使わずに全てmainメソッド内に書こうと思えば、重複だらけの非常に読みづらいソースコードになるのが想像できると思います。
ある一連の処理をメソッドとして定義しておいてそれを再利用するようにすれば、コーディングの量を減らすこともできるし、修正したりするのも非常に楽になります。
次回は、メソッドの戻り値というのを使ってみましょう。引数と戻り値が使いこなせたらメソッドの扱いは自由自在になりますよ。
今だけ→転職できなければ全額返金の「エンジニア転職保証コース」
絶対エンジニアになる!→テックエキスパート
フリーランスエンジニアの収入例を見てみる→レバテックフリーランス