メソッドの基本¶
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);
}
}
◼ ポイント解説
add
とsubtract
は、処理部分だけを担当する「部品」のようなものmain
メソッドでは、「入力 → メソッドで処理 → 結果を表示」という流れを明確に表現- 処理を分離することで、読みやすく、再利用しやすい設計になる
設計力アップのヒント
「この処理、同じようなことを他でも使いそうだな?」と思ったら、メソッド化のチャンスです。 処理のまとまりを意識することが、将来のクラス設計やライブラリ開発にもつながっていきます。
このように、簡単な例でも「メソッドに分ける意味」がはっきり見えてきます。
6. よくある間違いと注意点¶
メソッドを使い始めたばかりのうちは、いくつかつまずきやすいポイントがあります。 ここでは、初心者がよくやってしまう間違いと、それをどう避けるかを紹介します。
◼ 1. メソッドを main メソッドの中に書いてしまう
public class Sample {
public static void main(String[] args) {
// ❌ この中にメソッドを定義するとエラー
public static int add(int a, int b) {
return a + b;
}
}
}
✅ 正しい書き方:
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