入門 ブラウザ 約15分

メソッドで処理をまとめる

引数と戻り値のあるメソッドを使い、処理を名前でまとめる基本を学ぶレッスン。

プログラムが長くなると「この部分、何をやっているんだろう」と読みづらくなります。メソッドを使うと、ひとまとまりの処理に名前をつけて切り出し、main をすっきりさせることができます。

実行環境は引き続きブラウザ上のもの(paiza.IOOneCompiler)です。

main が長くなるとどうなるか

「1 から n までの合計」を表示するコードを考えます。

public class Main {
  public static void main(String[] args) {
    int sum1 = 0;
    for (int i = 1; i <= 5; i++) {
      sum1 = sum1 + i;
    }
    System.out.println("1〜5の合計: " + sum1);

    int sum2 = 0;
    for (int i = 1; i <= 10; i++) {
      sum2 = sum2 + i;
    }
    System.out.println("1〜10の合計: " + sum2);
  }
}
1〜5の合計: 15
1〜10の合計: 55

同じ「合計を出す」処理が2回書かれています。数のパターンが増えるたびにコピーが増えてしまいます。

メソッドに切り出す

まず、挨拶を表示するだけの単純なメソッドで構造を見ます。

public class Main {
  public static void main(String[] args) {
    greet();
    greet();
  }

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

greet という名前のメソッドを作り、main から2回呼んでいます。ポイントは3つです。

要素書き方意味
戻り値の型void何も返さない
メソッド名greet処理につけた名前
()空のカッコ受け取る値なし

static はいまは「main と同じクラスで使うためのおまじない」として扱います。詳しい意味はクラスとオブジェクトの回で扱います。

引数を使う

メソッドに値を渡すことで、呼び出しごとに動きを変えられます。渡す値のことを引数(ひきすう)と呼びます。

public class Main {
  public static void main(String[] args) {
    greet("田中");
    greet("佐藤");
  }

  static void greet(String name) {
    System.out.println(name + "さん、こんにちは!");
  }
}
田中さん、こんにちは!
佐藤さん、こんにちは!

(String name) がメソッドの引数です。呼び出し側の "田中"name に入り、メソッド内で使えます。

戻り値を使う

メソッドが呼び出し元に返す値を戻り値と呼びます。計算結果をメソッドの外で使いたいときは、return で返します。

public class Main {
  public static void main(String[] args) {
    int result = square(4);
    System.out.println("4の2乗: " + result);
  }

  static int square(int n) {
    return n * n;
  }
}
4の2乗: 16

square(4)4 * 4 = 16 を計算して返し、その値が result に入ります。変わった部分を先ほどの表と比べます。

要素greet のときsquare のとき
戻り値の型void(返さない)int(整数を返す)
returnなしreturn n * n;

冒頭の問題をメソッドで解決する

最初に見た「合計を出す処理」をメソッドに切り出します。

public class Main {
  public static void main(String[] args) {
    System.out.println("1〜5の合計: " + sumUpTo(5));
    System.out.println("1〜10の合計: " + sumUpTo(10));
    System.out.println("1〜100の合計: " + sumUpTo(100));
  }

  static int sumUpTo(int max) {
    int sum = 0;
    for (int i = 1; i <= max; i++) {
      sum = sum + i;
    }
    return sum;
  }
}
1〜5の合計: 15
1〜10の合計: 55
1〜100の合計: 5050

main はメソッド名を読むだけで「何をしているか」がわかるようになりました。100パターン追加しても1行ずつで済みます。

コードにメモを書く(コメント)

// から行末までは、コードとして実行されません。処理の意図を書き添えるメモとして使います。

// 1 から max までの合計を返す
static int sumUpTo(int max) {
  int sum = 0;
  for (int i = 1; i <= max; i++) {
    sum = sum + i;
  }
  return sum;
}

メソッド名だけでは伝わりにくい前提や注意点を補うときに使います。実行結果は変わらないことを確認してください。

次の回へ

次は「複数の値をまとめて持つ方法」として配列を学びます。for 文とメソッドを組み合わせて配列を処理すると、プログラムでできることが一気に広がります。