こんにちは。「Javaを復習する初心者」です。
EclipseでJava入門の第3回目を書きます。第2回では税込み価格の算出を変数を使ってプログラミングしました。今回はメソッドを使って算出をする方法を説明します。
メソッド
メソッドは実は既に登場していて、「public static void main」がメソッドです。クラスを実行すると中括弧の中の処理が実行されます。ここで「実行する」とはEclipseでファイルを右クリックして、「実装」->「Javaアプリケーション」をクリックしたときのことです。
大雑把にいうと、メソッドを定義することにより、一連の処理をまとめて扱うことができます。今回は税込み価格の計算処理をメソッドにしようと思いますが、その前にメソッドを使わない例を挙げます。
2つの商品
前回作ったプログラムでは100円の商品で消費税8パーセントの税込み価格をコンソールに出力するものでしたが、もし100円と200円2つの商品でそれぞれ税込み価格をコンソールに出力する場合、どのようなプログラムが思いつくでしょうか。現時点では次のようなプログラムが思いつくのではないでしょうか。
ソース
int price1 = 100;
int price2 = 200;
double taxRate = 0.08;
System.out.println((int) (price1 + price1 * taxRate));
System.out.println((int) (price2 + price2 * taxRate));
変数名に使える文字について説明してませんでしたが数字も使えますが、変数名の先頭に数字は使えません。
上記のプログラムは2か所で同じような処理をしています。System.out.printlnが2か所登場してますが、括弧の中は結局、[価格] + [価格] * [税率]という形です。[価格]の箇所が100円と200円に変化しているのみです。このように一部分のみが変わってるだけの処理をまとめることができます。
値を返さないメソッド
ここからメソッドを使った例を挙げます。使い方は大きく分けて二つあります。
まずは一つ目の使い方です。以下のプログラムはメソッドを使って、メソッド内でコンソールに出力をしています。lesson3パッケージにMethodExample1クラスを作成し、プログラムを作成しました。
ソース
package lesson3;
public class MethodExample1 {
public static void main(String[] args) {
System.out.println("メソッド例1");
System.out.println("100円の場合");
calcPriceIncludedTax(100);
System.out.println("200円の場合");
calcPriceIncludedTax(200);
}
public static void calcPriceIncludedTax(int price) {
double taxRate = 0.08;
System.out.println((int) (price + price * taxRate));
}
}
実行結果
メソッド例1
100円の場合
108
200円の場合
216
上記プログラムでは「calcPriceIncludedTax」メソッドが定義されています「public static void calcPriceIncludedTax(int price)」がメソッドの宣言でそのあとの中括弧の中が処理内容です。「int price」を仮引数と言います。「public static」は今は気にしないでください。そのあとの「void」はメソッドが値を返さないこと場合に使う宣言です。「値を返す場合」は後で説明します。
「calcPriceIncludedTax」メソッドの処理では仮引数が使われていることに注目してください。priceはint型で宣言されています。100や200という数値特定の値ではないのですが、とにかくint型だということです。メソッド内で仮引数を使って、「price + price * taxRate」という計算をしています。この箇所が前述の[価格] + [価格] * [税率]を表します。
仮引数に対して、メソッド呼び出し時に指定する値が実引数です。「calcPriceIncludedTax(100)」ではpriceを100という値にしています。この値でメソッド内の処理が実行されます。そのため、「System.out.println((int) (100 + 100 * taxRate));」が実行されます。処理の雰囲気は以下の図のようになります。
値を返すメソッド
次は二つ目の使い方です。先ほどの例はメソッドが「値を返さない」使い方でした。今度は「値を返す」使い方です。以下にソースと実行結果を載せます。
ソース
package lesson3;
public class MethodExample2 {
public static void main(String[] args) {
int priceIncludedTax = 0;
System.out.println("メソッド例2");
System.out.println("100円の場合");
priceIncludedTax = calcPriceIncludedTax(100);
System.out.println(priceIncludedTax);
System.out.println("200円の場合");
priceIncludedTax = calcPriceIncludedTax(200);
System.out.println(priceIncludedTax);
}
public static int calcPriceIncludedTax(int price) {
double taxRate = 0.08;
return (int) (price + price * taxRate);
}
}
結果
メソッド例2
100円の場合
108
200円の場合
216
上記のメソッドの宣言は値を返却する場合の宣言です。まず「値を返す」箇所ですが、メソッドの処理内容で「return [式];」と書いてある箇所です。宣言の「public static int calcPriceIncludedTax(int price)」の箇所で、「public static」の次の「int」はメソッドが返却する値の型の宣言です。この「int」は「return [式];」の[式]の型と一致させる必要があります。「priceIncludedTax = calcPriceIncludedTax(100);」の箇所ではメソッドが返却する値を変数priceIncludedTaxに格納しています。つまり、(int)(100 + 100 * 0.08)の結果108が変数priceIncludedTaxに格納されます。同様に「priceIncludedTax = calcPriceIncludedTax(200);」では、(int)(200 + 200 * 0.08)の結果216が変数priceIncludedTaxに格納されます。処理の雰囲気は以下の図のようになります。
ところでメソッド名が長いですが、先頭の途中まで打ち込んでEclipseの補完機能を使うことができます。例えば、calcと打ち込み、ctrl + スペースキーでポップアップが出てきます。これで目的のメソッドを選ぶことができます。
以上、メソッドは大きく分けて値を返却するかしないかで二つの使い方があります。メソッドの目的に応じて使い分けます。今回は税込み価格計算をするメソッドという目的なのでint型を返却する使い方の方が適切だと思います。