引数
目次
- 解説
- 1. 引数のあるメソッド
- 2. 引数のみ異なるメソッド
- 3. 戻り値と引数のまとめ
解説
1. 引数のあるメソッド
引数(ひきすう)とは、メソッド内の処理で使用する値をメソッドの外から与える方法です。次のサンプルコードは、practiceCalculationの中で使用する3つの数値を呼び出し側から渡して計算させています。
static void practiceArguments() {
int result = practiceCalculation(100, 20, 3); // 3つの数値を渡す
Logger.out(result);
}
static int practiceCalculation(int a, int b, int c) {
return a + b + c; // 受け取った3つの数値が入った変数を計算に使用
}
[2020/12/31 12:34:56.789] 123 // 100 + 20 + 3 の結果
メソッドの宣言側では、丸括弧内に引数を受け取るための変数(仮引数)を宣言します。この例ではint型の3つの a, b, c という変数を宣言しています。なお、呼び出す側では必ず対応する値を渡す必要があるため、仮引数の初期化や初期値という考え方は不要となります。
メソッドの呼出側では、丸括弧内に引数の実際の値(実引数)を入れます。実引数を変えて呼び出せば、同じメソッドでも引数の内容に応じた異なる結果を生み出すことが可能となります。
次のサンプルコードでは、呼び出す際に渡す引数を変更して2回呼び出しています。
static void practiceArguments() {
int result = practiceCalculation(100, 20, 3);
Logger.out(result);
result = practiceCalculation(1, 2, 3); // 異なる引数を渡す
Logger.out(result);
}
static int practiceCalculation(int a, int b, int c) {
return a + b + c; // 引数の内容によって異なる結果となる
}
[2020/12/31 12:34:56.789] 123 // 100 + 20 + 3 の結果
[2020/12/31 12:34:56.789] 6 // 1 + 2 + 3 の結果
2. 引数のみ異なるメソッド
同じメソッド名、同じ戻り値の型、同じ引数の型と数のメソッドは複数作れません。しかし、引数の型と数の組み合わせが異なるメソッドは別のメソッドとして複数作ることが可能です。
static void practiceArguments() {
int result = practiceCalculation(100, 20, 3);
Logger.out(result);
result = practiceCalculation(1, 2, 3);
Logger.out(result);
result = practiceCalculation(10, 20);
Logger.out(result);
}
static int practiceCalculation(int a, int b, int c) { // int型3つ
return a + b + c;
}
static int practiceCalculation(int a, int b) { // int型2つ
return a - b; // 同名で同じ戻り値型でも引数の数により処理が異なる
}
[2020/12/31 12:34:56.789] 123 // 100 + 20 + 3 の結果
[2020/12/31 12:34:56.789] 6 // 1 + 2 + 3 の結果
[2020/12/31 12:34:56.789] -10 // 10 - 20 の結果
この仕組みをオーバーロードと呼びます。メソッドを作るときにオーバーロードを活用する機会が最初はあまりないかもしれませんが、用意された様々なメソッドを使用する際には、同じ名前のメソッドでも引数の型と数によって処理内容が異なることに注意しましょう。
3. 戻り値と引数のまとめ
ここで改めて、メソッド宣言部の構造を確認しておきましょう。
なお、引数と戻り値は両方ある必要は無く、どちらか一方しかないメソッドも成立します。
問題
確認問題
確認問題1
この中で戻り値や引数を持つメソッドとして正しいものはどれか?
実践問題
(1) | VSCodeを起動し、ヘッダーメニューの「ファイル」>「フォルダーを開く...」から、「workspace_java_basic」プロジェクトを開いてください。 |
(2) | 「workspace_java_basic」プロジェクトの「net.digskill.structure」 パッケージの「Structure.java」を開いてください。 ※無い場合は「メソッドと戻り値」を先に学習しましょう。 |
(3) | 「Structure」クラス内に次のサンプルコードのメソッドをコピー&ペーストし、 mainから呼び出せるようにして、「F5」で実行できることを確認してください。 |
(4) | コメント行に記された各問題文に対し、答えとなるプログラムコードを 問題文の次の空白行以降に書き込みまたは書き換えて、「F5」で実行してください。 |
static void questionMethod() {
// (問1)引数なしで、ターミナルに「こんにちは」を
// 出力するメソッドmethodQ1をクラス内に作成し、
// 次の空白行で呼び出してください。
// (問2)引数なしで、戻り値として「こんばんは」を
// 戻すメソッドmethodQ2をクラス内に作成し、
// 戻り値をresultQ2で受け取るよう変更してください。
String resultQ2 = "";
Logger.out(resultQ2);
// (問3)下記の引数を受け取り、下記の処理を行う
// メソッドmethodQ3をこのクラス内に作成し、
// 戻り値をresultQ3で受け取るよう変更してください。
// 【引数1】50
// 【引数2】200
// 【処理】引数どうしを掛け算した結果を戻り値として戻す
int resultQ3 = 0;
Logger.out(resultQ3);
// (問4)下記の引数を受け取り、下記の処理を行う
// メソッドmethodQ4をこのクラス内に作成し、
// 戻り値をresultQ4で受け取るよう変更してください。
// 【引数1】50000
// 【引数2】2000000
// 【処理】引数どうしを掛け算した結果を戻り値として戻す
long resultQ4 = 0L;
Logger.out(resultQ4);
}