プログラミングにおけるメソッド(関数)とは、同じ処理を何度も実施したいときに、道具(メソッド)を作っておいて、繰り返し使うイメージだ。
Javaでももちろん同じだが、Javaを書くときには必ずmainメソッドが必要なので、言葉は聞いたことがある人がほとんどのはずだ。
このページではJavaのメソッドの使い方についてお伝えする。参考にしていただければと思う。
目次
Javaのメソッド(関数)の使い方
Javaのメソッドは、命令文が集まった操作を実行するためのものだ。
メソッドとは?
繰り返し使えるプログラミングで作った道具だと思うとわかりやすいだろう。
例えば、ふたつの値の平均値を求めるメソッドが定義されていたとする。もし、平均値を求めることが必要になったら、そのメソッドを使うだけですぐに平均値を求めることができる。
そういうツールを作っておくイメージだ。
なぜメソッドというものがあるのか?
理由は簡単で、「便利だから」の一言に尽きるだろう。
例えば、「ある数字に3をかけて、5で割って、4を足して、2を引く」という動作をする必要があるとしよう。
これを変数a,b,c,…,zのいずれでも実施しないといけない。
まず想像が付くのがひとつ書いてコピーしていく方法だ。確かにこれでも上手くいく。
1 2 3 4 5 6 7 |
a = (((a * 3) /5) +4) - 2; b = (((a * 3) /5) +4) - 2; c = (((a * 3) /5) +4) - 2; d = (((a * 3) /5) +4) - 2; ・ ・ ・ |
しかし、これが、「ある数字に3をかけて、5で割って、4を足して、3を引く」に変わって途端どうだろうか?
すべてを書き換えるのは非常に面倒なはずだ。
だからこそ、メソッド(道具)を用意しておいて、その道具自体を書き換えればいいようにする訳だ。
なぜメソッドというものがあるのか?
また、複雑な処理をいくつかのメソッドを組み合わせて行うということもできる。
こうすれば、大きなプログラムを何人かで分けてプログラミングすることも簡単だ。さらに、コードも分かりすくもなる。
メソッドの書き方
早速、書き方を見てみよう。書き方の基本は簡単だ。
メソッド名(引数1, 引数2, 引数3, …, 引数n);
引数に関しては次のページ以降で解説していくが、基本的な使い方を見ていこう。
メソッドを使ったサンプルプログラム
メソッドの呼び出し方をサンプルプログラムで見てみよう。
このプログラムでは、ふたつの数値、aとbの最大、最小、平均をひとつにまとめて表示するメソッドを定義して、そのメソッドを呼び出している。
ちなみにこれまでも出てきているが、mainメソッドは一番初めに実行されるメソッドだ。ここから様々なメソッドが呼ばれるイメージだと思ってほしい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class OneMethod { static int a = 10;//[1] static int b = 20;//[2] public static void main (String[] args) { printThreeValues();//[3] } private static void printThreeValues() {//[20] int maximum = a;//[21] if (b > a) {//[22] maximum = b;//[23] } int minimum = a;//[24] if (b < a) {//[25] minimum = b;//[26] } int average = (a + b) / 2;//[27] System.out.println("[28] 最大値:" + maximum); System.out.println("[29] 最小値:" + minimum); System.out.println("[30] 平均値:" + average); } } |
実行結果
1 2 3 |
[27] 最大値:20 [28] 最小値:10 [29] 平均値:15 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] フィールドaを宣言して、10を代入する。
- [2] フィールドbを宣言して、20を代入する。
- [3] メソッドprintThreeValuesを呼び出す。
- [20]メソッド:printThreeValuesを定義する。
- [21] maxにaを代入する。
- [22][23] bがaより大きければ、maximumにbを代入する。
- [24] minimumにaを代入する。
- [25][26] bがaより小さければ、minimumにbを代入する。
- [27] aとbの平均値をaverageに代入する。
- [28] 最大値maximumを表示する。
- [29] 最小値minimumを表示する。
- [30] 平均値averageを表示する。
メソッドを分けたサンプルプログラム
前のセクションのプログラムでは、最大、最小、平均をまとめて表示した。このプログラムでは、メソッドをデータ処理ごとに分けて定義して、表示させたい順番にメソッドを呼び出している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
public class ThreeMethods { static int a = 10;//[1] static int b = 20;//[2] public static void main (String[] args) { printMaximum();//[3] printMinimum();//[4] printAverage();//[5] } private static void printMaximum() {//[20] int maximum = a;//[21] if (b > a) {//[22] maximum = b;//[23] } System.out.println("[24] 最大値;" + maximum); } private static void printMinimum() {//[25] int minimum = a;//[26] if (b < a) {//[27] minimum = b;//[28] } System.out.println("[29] 最小値;" + minimum); } private static void printAverage() {//[30] int average = (a + b) / 2;//[31] System.out.println("[32] 平均値;" + average); } } |
実行結果
1 2 3 |
[24] 最大値;20 [29] 最小値;10 [32] 平均値;15 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] フィールドaを宣言して、10を代入する。
- [2] フィールドbを宣言して、20を代入する。
- [3] メソッドprintMaximumを呼び出す。
- [4] メソッドprintMinimumを呼び出す。
- [5] メソッドprintAverageを呼び出す。
- [20] メソッドprintMaximumを定義する。
- [21] maximumにaを代入する。
- [22][23] bがaより大きければ、maximumにbを代入する。
- [24] 最大値maximumを表示する。
- [25] メソッドprintMinimumを定義する。
- [26] minimumにaを代入する。
- [27] [28] bがaより小さければ、minimumにbを代入する。
- [29] 最小値minimumを表示する。
- [30] メソッドprintAverageを定義する。
- [31] averageに(a + b) / 2を代入する。
- [32] 平均値averageを表示する。
メソッドをコピーしたサンプルログラム
前のセクションで、二つのメソッドの使い方を説明した。メソッドをひとつにまとまったメソッドを使う方法と、処理ごとに分けて使う方法だ。どちらがよいのだろうか。最大、最小、平均の順に値を表示するだけなら、メソッド定義を3つの分けるのは手間がかかるので、ひとつのメソッドで済ませたくなる。
では、メソッドをひとつにまとめて書くとどうなるだろうか。後で、最大値だけを別に表示しなければならなくなると、おそらく最大値のところだけ、コピーしてもうひとつのメソッドをつくることになるだろう。それが、次のコードだ。メソッド:printOneValueはメソッド:printThreeValuesのコードの最大値に関係する部分をコピーしている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
public class CopiedMethod { static int a = 10;//[1] static int b = 20;//[2] public static void main (String[] args) { printOneValue();//[3] printThreeValues();//[4] } private static void printOneValue() {//[5] int maximum = a;//[6] if (b > a) {//[7] maximum = b;//[8] } System.out.println("[10] 最大値;" + maximum);//[10] } private static void printThreeValues() {//[20] int maximum = a;//[21] if (b > a) {//[22] maximum = b;//[23] } int minimum = a;//[24] if (b < a) {//[25] minimum = b;//[26] } int average = (a + b) / 2; System.out.println("[27] 最大値:" + maximum); System.out.println("[28] 最小値:" + minimum); System.out.println("[29] 平均値:" + average); } } |
実行結果
1 2 3 4 |
[10] 最大値;20 [55] 最大値 ; 20 [60] 最小値 ; 10 [62] 平均値 ;15 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] フィールドaを宣言して、10を代入する。
- [2] フィールドbを宣言して、20を代入する。
- [3] メソッド:printOneValueを呼び出す。
- [4] メソッド:printThreeValuesを呼び出す。
- [5] メソッドprintOneValueを定義する。
- [6]-[10] メソッド:printThreeValues の[20]-[23]をコピー
- [20] [30]OneMethod:printThreeValuesメソッドと同じ。
メソッドを共有したサンプルログラム
将来、処理の追加や変更のことを考えるとどうだろうか。コピーされたコードのない小さな処理単位に分けたほうが、変更しやすいのは明らかだ。例えば、最大だけ表示したい。最大、最小、平均の表示の順番を変えたい。このような要求に簡単に応えられる。
さらに、コピーされたコードがなければ、修正は一箇所で済む。これが重要な点だ。もし、「最大値」という文字表示を「最大」だけの表示に修正するとなった場合、一箇所でよいのだ。
では、サンプルで見てみよう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
public class CommonMethods { static int a = 10;//[1] static int b = 20;//[2] public static void main (String[] args) { printOneValue();//[3] printThreeValues();//[4] } private static void printOneValue() {//[5] printMaximum();//[6] } private static void printThreeValues() {//[7] printMaximum();//[8] printMinimum();//[9] printAverage();//[10] } private static void printMaximum() {//[20] int maximum = a;//[21] if (b > a) {//[22] maximum = b;//[23] } System.out.println("[24] 最大値;" + maximum); } private static void printMinimum() {//[25] int minimum = a;//[26] if (b < a) {//[27] minimum = b;//[28] } System.out.println("[29] 最小値;" + minimum); } private static void printAverage() {//[30] int average = (a + b) / 2;//[31] System.out.println("[32] 平均値;" + average); } } |
実行結果
1 2 3 4 |
[24] 最大値;20 [24] 最大値;20 [29] 最小値;10 [32] 平均値;15 |
サンプルプログラムの説明
それでは簡単にプログラムの解説をしてゆこう。
- [1] フィールドaを宣言して、10を代入する。
- [2] フィールドbを宣言して、20を代入する。
- [3] メソッド:printOneValueを呼び出す。
- [4] メソッド:printThreeValuesを呼び出す。
- [5] メソッドprintOneValueを定義する。
- [6] メソッド:printMaximumを呼び出す。
- [7] メソッド:printThreeValuesを定義する。
- [8] メソッドprintMaximumを呼び出す。
- [9] メソッドprintMinimumを呼び出す。
- [10] メソッドprintAverageを呼び出す。
- [20] [29]ThreeMethod:printThreeValuesメソッドと同じ。
まとめ
このページではJavaのメソッドの使い方をまとめてご紹介した。
メソッドはプログラミングにおける重要な文法だ。これがないとプログラミングは極めて面倒なものになる。
使い方を一通り理解しておこう。(また、より詳細は下記から順番に確認していってほしい)