Java入門 STEP7|メソッドを使ってみよう

karin@taishi@felmia

メソッドとは?

プログラムを書いていると、同じような処理を何度も使いたいことがあります。

例えば、

「こんにちは!」と表示する処理を、プログラムのいろいろな場所で使いたいとします。

そのたびに同じコードを書くこともできますが、処理が増えてくるとコードが長くなり、修正するのも大変になります。

Javaでは、処理をひとまとまりにして「メソッド」として作ることができます。

作成したメソッドは、必要なときに呼び出して実行できます。

メソッドを使うメリット

メソッドを使うことで、例えば次のようなメリットがあります。

  • 同じ処理を何度も書かなくてよくなる
  • プログラムが読みやすくなる
  • 処理を修正するときに、修正する場所を減らせる

プログラムが大きくなってくるほど、処理を分けて整理することが重要になります。

まずは、簡単なメソッドを1つ作って実際に呼び出してみましょう。

メソッドを作ってみよう

今回は、「こんにちは!」と表示するhelloメソッドを作ります。

基本的な形は次のようになります。

public static void hello() {
    実行したい処理
}

少し新しい言葉が増えましたが、最初からすべて覚える必要はありません。

今は、

hello → メソッドの名前

( ) → あとで値を受け取るときに使う

{ } → メソッドで実行する処理を書く

というところを確認しておきましょう。

publicstaticvoidについても今後少しずつ理解していきます。

実際にメソッドを使ってみよう

新しくMethodSampleクラスを作成してください。

作成できたら、次のコードを入力して実行してみましょう。

public class MethodSample {

    public static void main(String[] args) {
        hello();
    }

    public static void hello() {
        System.out.println("こんにちは!");
    }

}

実行結果

こんにちは!

プログラムは、まずmainメソッドから始まります。

その中にある、

hello();

helloメソッドを呼び出しています。

すると、helloメソッドの中に書かれている、

System.out.println("こんにちは!");

が実行されます。

メソッドは何度でも呼び出せる

作ったメソッドは、必要なだけ呼び出すことができます。

例えば、

hello();
hello();
hello();

と書けば、helloメソッドが3回実行されます。

「作る」と「呼び出す」は別

メソッドは、作っただけでは実行されません。

今回の場合、

public static void hello() { ... }

メソッドを作る

hello();

メソッドを呼び出す

という違いがあります。

mainメソッドからhello();を呼び出すことで、初めてhelloメソッドの処理が実行されます。

ルミィ
ルミィ

メソッドは「よく使う処理をまとめておいて、必要なときに呼び出すもの」と考えると分かりやすいよ♪

引数を使ってメソッドに値を渡してみよう

先ほど作ったhelloメソッドは、呼び出すと毎回「こんにちは!」と表示されました。

メソッドを呼び出すときに値を渡すことで、その値によって処理の内容を変えることもできます。

メソッドに渡す値を「引数(ひきすう)」と呼びます。

引数の基本

例えば、名前を受け取るhelloメソッドは次のように書くことができます。

public static void hello(String name) {
    System.out.println("こんにちは、" + name + "さん!");
}

( )の中にある、

String name

で、呼び出した側から渡された文字列を受け取ります。

そして、メソッドを呼び出すときは次のように値を渡します。

hello("Lumy");

この"Lumy"が、nameに入ります。

そのため、

こんにちは、Lumyさん!

と表示されます。

実際に引数を使ってみよう

新しくArgumentSampleクラスを作成してください。

作成できたら、次のコードを入力して実行してみましょう。

public class ArgumentSample {

    public static void main(String[] args) {
        hello("Lumy");
        hello("Java");
    }

    public static void hello(String name) {
        System.out.println("こんにちは、" + name + "さん!");
    }

}

実行結果

こんにちは、Lumyさん!
こんにちは、Javaさん!

同じhelloメソッドを呼び出していますが、渡している値が違うため、表示される内容も変わっています。

値が渡される流れ

例えば、

hello("Lumy");

と呼び出した場合は、

hello("Lumy");

"Lumy"を渡す

String name

name"Lumy"が入る

System.out.println("こんにちは、" + name + "さん!");

↓ 実行

こんにちは、Lumyさん!

このように、引数を使うことで、同じメソッドでも渡す値によって処理を変えることができます。

引数は複数使うこともできる

メソッドには、複数の引数を渡すこともできます。

例えば、名前と年齢を受け取る場合は次のように書きます。

public static void profile(String name, int age) {
    System.out.println(name + "さんは" + age + "歳です");
}

呼び出すときは、

profile("Lumy", 20);

と書きます。

複数の引数を使う場合は、,(カンマ)で区切ります。

引数の順番とデータ型に注意しよう

profile(String name, int age)

と作った場合は、

profile("Lumy", 20);

のように、String → intの順番で値を渡します。

順番やデータ型が合っていないとエラーになります。

ルミィ
ルミィ

引数は、メソッドに渡す「材料」みたいなものだよ♪
渡す材料を変えれば、同じメソッドでも違う結果にできるね!

戻り値を使って結果を受け取ってみよう

ここまでのメソッドは、文字を表示するなどの処理を実行するものでした。

メソッドでは、処理した結果を呼び出した側へ返すこともできます。

メソッドから返される値を「戻り値」と呼びます。

例えば、2つの数字を受け取って足し算し、その計算結果を返すメソッドを作ってみましょう。

戻り値のあるメソッドの書き方

基本的な形は次のようになります。

public static 戻り値の型 メソッド名(引数) {
    処理
    return 戻り値;
}

例えば、2つの整数を足して結果を返すaddメソッドは、次のように書けます。

public static int add(int num1, int num2) {
    int result = num1 + num2;
    return result;
}

このメソッドでは、

int num1, int num2

で2つの整数を受け取ります。

受け取った値を足してresultに代入し、

return result;

で計算結果を呼び出した側へ返しています。

実際に戻り値を使ってみよう

新しくReturnSampleクラスを作成してください。

作成できたら、次のコードを入力して実行してみましょう。

public class ReturnSample {

    public static void main(String[] args) {
        int answer = add(10, 5);

        System.out.println(answer);
    }

    public static int add(int num1, int num2) {
        int result = num1 + num2;

        return result;
    }

}

実行結果

15

今回は、

add(10, 5)

と呼び出しているので、105addメソッドに渡されます。

addメソッドの中で、

10 + 5

が計算され、その結果である15returnによって呼び出した側へ返されます。

返された15は、

int answer

に代入されます。

値が返ってくる流れ

add(10, 5)を呼び出す

num110num25が入る

num1 + num2を計算する

return result;15を返す

int answer = 15;と同じ状態になる

System.out.println(answer);15を表示する

voidとの違い

ここまでに何度か登場したvoidにも、ここで意味があります。

voidは、戻り値がないことを表します。

例えば、

public static void hello() {
    System.out.println("こんにちは!");
}

このメソッドは処理を実行するだけで、呼び出した側へ値を返しません。

一方、

public static int add(int num1, int num2) {
    return num1 + num2;
}

こちらはintと書かれているため、int型の値を返すメソッドです。

voidと戻り値のあるメソッドの違い

void
→ 値を返さない

int
int型の値を返す

String
String型の値を返す

戻り値がある場合は、基本的にreturnを使って値を返します。

ルミィ
ルミィ

「引数」はメソッドに渡す値、「戻り値」はメソッドから返ってくる値だよ♪
行きと帰りで考えると分かりやすいね!

変数を使える範囲を知ろう

変数は、プログラムのどこからでも自由に使えるわけではありません。

変数には「使える範囲」が決まっています。

この変数を使える範囲のことを「スコープ」と呼びます。

例えば、次のコードを見てみましょう。

public static void main(String[] args) {
    int age = 20;

    System.out.println(age);
}

agemainメソッドの中で作られているため、同じmainメソッドの中では使用できます。

しかし、別のメソッドからそのままageを使うことはできません。

別のメソッドではそのまま使えない

例えば、次のコードはエラーになります。

public static void main(String[] args) {
    int age = 20;
}

public static void showAge() {
    System.out.println(age);
}

agemainメソッドの中で作られた変数です。

そのため、別のshowAgeメソッドからはageを使うことができません。

変数を作った場所を確認しよう

メソッドの中で作った変数は、基本的にそのメソッドの中で使います。

mainメソッドの中で作った変数
mainメソッドの中で使える

showAgeメソッドの中で作った変数
showAgeメソッドの中で使える

「変数が見つからない」というエラーが出たときは、変数をどこで作ったのか確認してみましょう。

別のメソッドで値を使いたい場合

では、mainメソッドにある値を別のメソッドで使いたい場合はどうすればよいでしょうか。

ここで、先ほど学んだ「引数」が使えます。

新しくScopeSampleクラスを作成してください。

public class ScopeSample {

    public static void main(String[] args) {
        int age = 20;

        showAge(age);
    }

    public static void showAge(int age) {
        System.out.println("年齢は" + age + "歳です");
    }

}

実行結果

年齢は20歳です

mainメソッドで作ったageの値を、

showAge(age);

showAgeメソッドへ渡しています。

showAgeメソッドでは、

int age

でその値を受け取るため、渡された20を使うことができます。

つまり、別のメソッドで必要な値は、引数として渡すことができます。

ルミィ
ルミィ

「この変数、ここでは使えない!」となったら、どこで作った変数なのか確認してみよう♪
別のメソッドで使いたいときは、引数で渡す方法もあるよ!

実務ではメソッドをどう使う?

ここまで、メソッドの作り方や引数、戻り値について学んできました。

では、実際のプログラムでは、なぜ処理をメソッドに分けるのでしょうか。

その理由のひとつが、あとからプログラムを修正しやすくするためです。

例えば、商品の税込価格を計算する処理が、プログラムのいろいろな場所に書かれていたとします。

int total1 = (int)(1000 * 1.10);
int total2 = (int)(2000 * 1.10);
int total3 = (int)(3000 * 1.10);

このような処理が何十か所もあり、あとから税率の1.10を変更する必要が出てきた場合、すべての場所を修正しなければなりません。

修正する場所が多くなるほど、修正漏れや間違いが発生する可能性も高くなります。

そこで、税込価格を計算する処理をメソッドにまとめてみます。

public static int calculateTaxIncludedPrice(int price) {
    return (int)(price * 1.10);
}

税込価格が必要な場所では、このメソッドを呼び出します。

int total1 = calculateTaxIncludedPrice(1000);
int total2 = calculateTaxIncludedPrice(2000);
int total3 = calculateTaxIncludedPrice(3000);

こうしておけば、計算方法を変更する必要が出てきても、基本的にはメソッドの中を1か所修正するだけで済みます。

呼び出している場所を一つひとつ修正する必要はありません。

メソッドにまとめると修正しやすくなる

同じ計算を何か所にも書く
→ 変更するときに何か所も修正する必要がある

メソッドにまとめる
メソッドの処理を1か所修正すればよい

メソッドには、処理を再利用するだけでなく、修正する場所を減らしてプログラムを管理しやすくする役割もあります。

ルミィ
ルミィ

プログラムは「作って終わり」じゃなくて、あとから修正することも多いよ!
同じ処理をまとめておくと、変更するときにも助かるね♪

よくある間違い

メソッドでは、「作る場所」「呼び出し方」「引数」「戻り値」などが正しく合っていないとエラーになることがあります。

よくある間違いを確認しておきましょう。

メソッドを作っただけで呼び出していない

メソッドは、作成しただけでは実行されません。

例えば、

public static void hello() {
    System.out.println("こんにちは!");
}

とメソッドを作っても、それだけでは「こんにちは!」は表示されません。

mainメソッドなどから、

hello();

と呼び出す必要があります。

メソッドは「作る」と「呼び出す」がセット

メソッドを作る
→ 実行したい処理をまとめておく

メソッドを呼び出す
→ まとめておいた処理を実行する

「メソッドを作ったのに何も表示されない」という場合は、呼び出しているか確認してみましょう。

引数の数やデータ型が違う

例えば、次のメソッドを作ったとします。

public static void hello(String name) {
    System.out.println("こんにちは、" + name + "さん!");
}

このメソッドはString型の値を1つ受け取ります。

そのため、

hello("Lumy");

なら呼び出すことができます。

一方で、

hello();

のように引数を渡さなかったり、必要な数やデータ型が違ったりするとエラーになります。

メソッドを呼び出すときは、

「引数はいくつ必要か」

「どのデータ型の値を渡すのか」

を確認しましょう。

戻り値のデータ型が合っていない

戻り値があるメソッドでは、宣言したデータ型に合った値を返す必要があります。

例えば、

public static int add(int num1, int num2) {
    return num1 + num2;
}

では、戻り値の型がintなので、returnでもint型の値を返しています。

Stringなど、戻り値の型と合わない値を返そうとするとエラーになります。

returnを書き忘れている

戻り値のあるメソッドでは、結果を返すためにreturnが必要です。

例えば、

public static int add(...)

のようにint型の値を返すメソッドを作った場合は、処理の中でint型の値をreturnする必要があります。

一方、voidは戻り値がないことを表すため、値を返す必要はありません。

変数を使える範囲に注意する

メソッドの中で作った変数は、別のメソッドからそのまま使うことはできません。

例えば、mainメソッドの中で作ったageを別のメソッドで使いたい場合は、先ほど学んだように引数として渡す方法があります。

エラーになったら4つを確認しよう

メソッドでエラーになった場合は、

  1. メソッドを正しく呼び出しているか
  2. 引数の数は合っているか
  3. 引数のデータ型は合っているか
  4. 戻り値の型とreturnする値が合っているか

を確認してみましょう。

ルミィ
ルミィ

メソッドは最初はいろいろな書き方が出てきて難しく見えるけど、「何を渡して、何をして、何を返すのか」に分けて考えてみよう♪

STEP7のまとめ

このSTEPでは、処理をひとまとめにして使う「メソッド」について学びました。

最後に、今回のポイントを振り返っておきましょう。

  • メソッドを使うと、処理をひとまとめにできる
  • 作ったメソッドは、必要な場所から呼び出して実行できる
  • 同じメソッドを何度でも呼び出すことができる
  • 「引数」を使うと、メソッドに値を渡すことができる
  • 引数は複数渡すこともできる
  • 「戻り値」を使うと、メソッドで処理した結果を呼び出した側へ返すことができる
  • 値を返すときはreturnを使う
  • voidは、戻り値がないことを表す
  • メソッドの中で作った変数には、使える範囲がある
  • 別のメソッドで値を使いたい場合は、引数として渡すことができる

メソッドを使うことで、長くなったプログラムを処理ごとに分けて整理できるようになります。

また、同じ処理を何度も書かずに再利用できるため、修正が必要になった場合も変更する場所を少なくできます。

これからプログラムが大きくなるほど、メソッドを使って処理を分けることが重要になってきます。

ルミィ
ルミィ

STEP7クリア!
メソッドは「処理をまとめた部品」みたいなものだよ♪
「何を渡す?」「何をする?」「何を返す?」に分けて考えてみよう!

次のSTEPへ

次のSTEPでは、複数の値をまとめて扱うことができる「配列」について学びます。

例えば、5人分の点数を保存したい場合、

score1
score2
score3
score4
score5

のように変数をたくさん作ることもできます。

しかし、データが100個、1000個と増えていくと管理するのが大変です。

配列を使えば、同じ種類の複数のデータを1つにまとめて管理できます。

さらに、STEP6で学んだfor文と組み合わせることで、配列に入っているデータを順番に処理することもできます。

STEP8「配列を使ってみよう」

記事URLをコピーしました