コンテンツにスキップ

メソッドの基本

1. メソッドとは?

プログラムが大きくなってくると、「同じような処理を何度も書いてしまった…」「どこに何を書いたか分かりにくい…」と感じることが増えてきます。 そんなときに役立つのが「メソッド」です。

◼ メソッドとは「処理をまとめた部品」

メソッドは、一連の処理をひとつにまとめた「部品のようなもの」です。 たとえば、「こんにちは」と表示する処理を何度も使いたいとき、毎回 System.out.println("こんにちは"); を書くのではなく、次のようにまとめておくことができます。

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

こうして作ったメソッドは、必要なところで何度でも呼び出すことができます。

sayHello();  // 呼び出し
sayHello();

◼ なんのために使うの?

ここで一度立ち止まって、「なぜメソッドを使うのか?」を考えてみましょう。メソッドを使う目的は、大きく分けて次の2つです。

✅ 1. 「同じ処理を何度も書かずにすむ」
→ 繰り返し使えるようにすることで、コードを短く・わかりやすくできます。
✅ 2. 「処理を整理して考えやすくする」
→ それぞれのメソッドが1つの「役割」を持つことで、プログラムの構造がはっきりします。

ここでのポイント

「処理を部品に分ける」という考え方は、この先学ぶ「クラス」や「オブジェクト指向」の土台になります。 今はまだクラスを設計する段階ではありませんが、メソッド単位で処理を分けて考えることで、自然と「設計的な視点」が身についていきます。

◼ メソッドを学ぶと何ができる?

  • 同じ処理を何度も使える
  • プログラムを機能ごとに整理できる
  • 後から読み直したときに理解しやすくなる
  • 他の人に説明するときにも便利

この章では、メソッドを使ってプログラムを部品化する方法を学びながら、プログラムを組み立てる力を身につけていきましょう!

2. メソッドの定義と呼び出し

前の項目で「メソッドとは何か?」を学びました。ここでは、実際に自分でメソッドを定義して使う方法を見ていきましょう。

Javaでメソッドを定義する基本的な書き方は、次のようになります。

基本構文

public static void メソッド名() {
    // 実行したい処理を書く
}

例えば、「こんにちは」と表示するメソッドはこのように書けます:

public static void sayHello() {
    System.out.println("こんにちは");
}
  • public static は今はひとまず「こう書くもの」として覚えておいて大丈夫です。
  • void は「このメソッドは戻り値を返さない」という意味です。
  • sayHello はメソッドの名前です。
  • {} の中に、メソッドが実行する処理内容を書きます。

◼ メソッドの呼び出し方

メソッドを使うには、mainメソッドの中などから名前を呼び出すだけです。

public class Main {
    public static void main(String[] args) {
        sayHello();  // メソッドを呼び出す
    }

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

このプログラムを実行すると、コンソールに次のように表示されます:

こんにちは

定義する場所に注意!

メソッドは、mainメソッドの外側に書きます。

間違った例(mainの中に定義してしまう):

public static void main(String[] args) {
    public static void sayHello() {  // ❌ エラーになる!
        System.out.println("こんにちは");
    }
}

このように書くとエラーになります。メソッドの定義はクラスの中、mainの外に書くようにしましょう。

◼ どんなときに使うの?

次のようなときに、メソッドを使うとプログラムが整理しやすくなります:

  • 同じような処理を何回も書きたくないとき
  • ひとつの処理のかたまり(=機能)を分けたいとき
  • プログラムを読みやすくしたいとき

設計っぽさを少し意識しよう

「この処理は、まとめて1つの部品(メソッド)にできるかな?」と考えるクセをつけておくと、 後でオブジェクト指向の「クラス」や「役割分担」を学ぶときにスムーズにつながります。

3. 引数と戻り値のあるメソッド

前の項目では、処理をまとめたシンプルなメソッドの作り方を学びました。 ここでは、「外から値を受け取る」引数と、「結果を返す」戻り値のあるメソッドについて学びます。

これらを使うことで、メソッドをより柔軟で便利な「部品」にすることができます。

◼ 引数とは?

引数(ひきすう)は、メソッドに渡す値のことです。

たとえば、「名前を受け取ってあいさつをするメソッド」を作るとします:

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

このように、()の中で「型」と「変数名」を指定しておきます。

  • String name:これは引数の定義(受け取る側)
  • メソッドを呼び出すときに、具体的な値(“たろう”など)を渡します:
    public static void main(String[] args) {
        greet("たろう");  // → 「こんにちは、たろうさん!」と表示
    }
    

◼ 戻り値とは?

戻り値とは、メソッドが処理の結果として返す値のことです。

たとえば、2つの数を足して結果を返すメソッドは次のように書きます:

public static int add(int a, int b) {
    int result = a + b;
    return result;
}
  • public static int:このメソッドはint型の値を返すという意味
  • return文:この行で処理結果を返す

呼び出すときは、戻り値を変数で受け取ることもできます:

int sum = add(3, 5);  // sum に 8 が入る
System.out.println("合計は " + sum);

◼ 引数と戻り値をセットで考える

引数と戻り値は、「入力」と「出力」のような関係です。

用語 役割 たとえるなら...
引数 入力(受け取る) 材料
戻り値 出力(返す) 完成品

これを使うことで、メソッドは「入力 → 処理 → 出力」のはっきりした流れになります。

◼ voidとの違い

「戻り値なし(void)」との違いを見てみましょう:

戻り値の型 使い方例 説明
void 画面に表示するだけなど 結果を返さない
intなど 計算結果を返す 他で使える値として返す

設計的な視点で見てみよう

「このメソッドには何を渡す必要があるか?」「どんな結果を返せば役立つか?」 そんなふうにメソッドの「役割」と「使い道」を考えることが、設計力の第一歩です。

◼ まとめ

  • 引数:メソッドに値を渡す
  • 戻り値:メソッドから値を返す
  • return文を使って値を返す
  • 引数と戻り値を使うと、より再利用しやすい部品になる

4. メソッドのオーバーロード

前の項目で、引数や戻り値を使って、メソッドをより柔軟にする方法を学びました。 今回は「同じ名前のメソッドを、引数の数や型に応じて使い分ける」方法、つまりオーバーロードについて学びます。

◼ オーバーロードとは?

オーバーロード(overload)とは、同じ名前のメソッドを、引数の違いで複数定義できる仕組みのことです。

たとえば、「あいさつを表示するメソッド」を、名前を指定する場合としない場合で分けたいとします。

// 引数なしバージョン
public static void greet() {
    System.out.println("こんにちは!");
}

// 引数ありバージョン
public static void greet(String name) {
    System.out.println("こんにちは、" + name + "さん!");
}

このように、メソッド名は同じでも、引数の種類や数が違えばOKです。

◼ 実際の呼び出し方

呼び出すときは、Javaが渡された引数の情報をもとに、自動で適切なメソッドを選んで実行してくれます。

greet();              // → 「こんにちは!」と表示される
greet("たろう");       // → 「こんにちは、たろうさん!」と表示される

◼ オーバーロードのルール

オーバーロードを使うときは、次のどれかが違っている必要があります:

  • 引数の数が違う
  • 引数の型が違う
  • 引数の並び順が違う(異なる型が複数ある場合)

ただし注意:戻り値の型だけが違っていても、オーバーロードにはなりません。

// ❌ エラーになる例:引数が同じで戻り値だけ違う
public static int sample() { return 1; }
public static double sample() { return 1.0; }  // → エラー!

◼ オーバーロードが便利な場面

オーバーロードを使うことで、同じ「動作の名前」で、さまざまな使い方ができるようになります。

たとえば:

  • print() メソッド → 文字列も数値も表示できる(標準ライブラリのオーバーロード例)
  • add() メソッド → 数を足す or 配列を足す など、複数バージョンを用意できる

設計っぽさを少し意識

「名前は同じでも、引数の違いで使い分けできる」=「使う人にとって分かりやすい設計」になります。 Javaの標準ライブラリでもたくさん使われている考え方なので、ここで慣れておきましょう!

◼ まとめ

  • オーバーロードとは、同じ名前で複数のメソッドを定義すること
  • 引数の「数」「型」「順番」が違えばOK
  • 呼び出し時に、Javaが自動で適切なバージョンを選んでくれる -「使いやすさ」や「統一感」のあるプログラム設計につながる

5. メソッドを使ったプログラム例

ここでは、これまで学んだメソッドの知識を使って、シンプルな電卓プログラムを作ってみましょう。

◼ やりたいこと

  • 足し算と引き算を行うメソッドを作る
  • メインの処理は「入力 → 処理 → 出力」という流れを意識
  • 「処理」部分をメソッドに分けることで、見通しのよい構造にする

◼ プログラム例:簡単な電卓

import java.util.Scanner;

public class SimpleCalculator {

    // 足し算メソッド
    public static int add(int a, int b) {
        return a + b;
    }

    // 引き算メソッド
    public static int subtract(int a, int b) {
        return a - b;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("1つ目の数を入力してください: ");
        int x = scanner.nextInt();

        System.out.print("2つ目の数を入力してください: ");
        int y = scanner.nextInt();

        int sum = add(x, y);
        int diff = subtract(x, y);

        System.out.println("足し算の結果: " + sum);
        System.out.println("引き算の結果: " + diff);
    }
}

◼ ポイント解説

  • addsubtract は、処理部分だけを担当する「部品」のようなもの
  • main メソッドでは、「入力 → メソッドで処理 → 結果を表示」という流れを明確に表現
  • 処理を分離することで、読みやすく、再利用しやすい設計になる

設計力アップのヒント

「この処理、同じようなことを他でも使いそうだな?」と思ったら、メソッド化のチャンスです。 処理のまとまりを意識することが、将来のクラス設計やライブラリ開発にもつながっていきます。

このように、簡単な例でも「メソッドに分ける意味」がはっきり見えてきます。

6. よくある間違いと注意点

メソッドを使い始めたばかりのうちは、いくつかつまずきやすいポイントがあります。 ここでは、初心者がよくやってしまう間違いと、それをどう避けるかを紹介します。

◼ 1. メソッドを main メソッドの中に書いてしまう

public class Sample {

    public static void main(String[] args) {

        // ❌ この中にメソッドを定義するとエラー
        public static int add(int a, int b) {
            return a + b;
        }
    }
}
🔴 エラーの原因: Javaでは、メソッドはクラスの中に書くが、他のメソッドの中には書けない。

✅ 正しい書き方:

public class Sample {

    public static int add(int a, int b) {
        return a + b;
    }

    public static void main(String[] args) {
        System.out.println(add(3, 5));
    }
}

◼ 2. return を書き忘れる

public static int square(int x) {
    // ❌ 戻り値があるのに return がない → エラー
}

🔴 エラーの原因: 戻り値のあるメソッドには、必ず return 文で値を返す必要があります。

✅ 修正例:

public static int square(int x) {
    return x * x;
}

◼ 3. 引数の数や型が合わずにエラーになる

public static int multiply(int a, int b) {
    return a * b;
}

public static void main(String[] args) {
    System.out.println(multiply(5));  // ❌ 引数が1つ → エラー
}

🔴 エラーの原因: 呼び出し時の引数の数や型が、定義と合っていない。

✅ 修正例:

System.out.println(multiply(5, 2));  // OK

◼ 補足:オーバーロードの落とし穴

オーバーロードを使っていて、似たようなメソッドが複数あると、どれが使われるのか分かりにくくなることがあります。

public static void show(int x) {
    System.out.println("int: " + x);
}

public static void show(double x) {
    System.out.println("double: " + x);
}

show(5);       // int 版が呼ばれる
show(5.0);     // double 版が呼ばれる

→ 意図した通りに呼び出されるように、使い方は明確に書くことが大切です。

◼ まとめ

  • メソッドはmainの中には定義できない
  • 戻り値があるなら、必ず return が必要
  • 引数の数・型・順番に注意
  • オーバーロードは便利だが、間違えやすい組み合わせに注意

7. 練習問題

以下の問題を通して、メソッドを使った部品化の考え方を身につけましょう。 実際にコードを書いて試すことで、理解が深まります。

問題1:2つの整数を受け取って、合計を返すメソッドを作成しなさい

要件:

  • メソッド名:add
  • 引数:整数2つ
  • 戻り値:合計(int)

呼び出し例:

int result = add(10, 20);
System.out.println(result);  // → 30

問題2:1つの整数を受け取り、その値を2倍にして返すメソッドを作成しなさい

要件:

  • メソッド名:doubleValue
  • 引数:int型の整数1つ
  • 戻り値:2倍の値(int)

呼び出し例:

System.out.println(doubleValue(5));  // → 10    

問題3:引数として受け取った名前に対して、あいさつ文を表示するメソッドを作成しなさい

要件:

  • メソッド名:greet
  • 引数:文字列1つ(名前)
  • 戻り値:なし(表示だけ)

呼び出し例:

greet("たろう");  // → 「こんにちは、たろうさん!」と表示される

問題4:greet() メソッドをオーバーロードし、引数なしバージョンも定義しなさい

要件:

  • 引数なしバージョンでは「こんにちは!」と表示する
  • どちらも main メソッドから呼び出して動作確認すること

問題5:計算機プログラムを完成させよう(発展)

要件: - add, subtract, multiply, divide の4つのメソッドを用意する - すべて int 型の引数を2つ受け取り、結果を返す - main メソッドで、ユーザーから数字と演算子(+, -, *, /)を入力させて、該当のメソッドを呼び出す

プログラムを実行した際の標準入出力の例:

数1: 10
演算子: *
数2: 3 結果: 30