「メソッドって、ただの処理のかたまりでしょ?」——そう思っていませんか?
実は、メソッドを使いこなせるかどうかで、コードの読みやすさ・修正のしやすさ・チームでの開発効率が劇的に変わってきます。プロのエンジニアが「メソッド設計が大事」と口をそろえる理由は、まさにここにあります。
この記事では、IT研修の現場で初学者に繰り返し伝えてきた視点をもとに、「なぜメソッドが必要なのか」「Javaでの具体的な書き方」「現場で気をつけたいポイント」まで、ていねいに解説します。コード例もたっぷり用意したので、ぜひ手を動かしながら読み進めてください!
目次
1.メソッドって何が便利なの?
①処理を「再利用できる部品」としてまとめられる
まず一番シンプルな便利さから。メソッドは「処理をひとまとめにして、何度でも呼び出せる部品」です。
たとえば、割引価格を計算する処理が複数の場所で必要になったとします。メソッドを使わないと、同じ計算式をあちこちにコピーして書くことになります。でもそれだと、税率が変わったときに全部探して直さないといけない…とても大変ですよね。
// ❌ メソッドを使わない場合(同じ計算が散らばる)
double price1 = 24800 * 0.7;
double price2 = 15000 * 0.7;
double price3 = 8000 * 0.7;
// 割引率を変えたいとき、全行を修正しなければならない…
// ✅ メソッドを使う場合(一か所を直すだけでOK)
static double calcDiscountPrice(int originalPrice, double rate) {
return originalPrice * rate;
}
// 呼び出し
double price1 = calcDiscountPrice(24800, 0.7);
double price2 = calcDiscountPrice(15000, 0.7);
double price3 = calcDiscountPrice(8000, 0.7);
メソッドにまとめることで、修正は1か所だけ。コードの「部品化」ができると、プログラムの品質がぐっと上がります。
②「入口と出口」が明確になり、処理の流れが読みやすくなる
メソッドには「入口(引数)」と「出口(戻り値)」があります。この設計思想がとても大切で、処理の目的と流れを一目でわかるようにしてくれます。
料理に例えると——「材料を渡す(引数)→ シェフが調理する(メソッドの処理)→ 料理が出てくる(戻り値)」というイメージです。シェフの中身(レシピ)を知らなくても、材料を渡せば料理が返ってくる。それがメソッドの本質です。
// 「入力値を2乗する」メソッド
static int pow2(int src) {
return src * src;
}
// 使う側はシンプル
int result = pow2(3); // 3を渡す → 9が返ってくる
System.out.println(result); // → 9
pow2(3) を読むだけで「3を2乗するんだな」とすぐわかりますよね。これがメソッドが「読みやすさ」を生む理由です。
③機能を分割することで保守・修正・チーム開発が楽になる
大きなプログラムを1つのメソッド(mainメソッド)に全部書いてしまうと、どこに何の処理があるかわからなくなります。これは「スパゲッティコード」と呼ばれる悪い状態です。
メソッドで機能を分割すると、次のようなメリットが生まれます。
- ✅ バグの場所を特定しやすい(どのメソッドで問題が起きているかがわかる)
- ✅ チームで担当を分けやすい(Aさんはこのメソッド、Bさんはあのメソッドを担当)
- ✅ テストしやすい(メソッド単位で動作確認できる)
// mainメソッドがすっきり! 何をしているか一目でわかる
public static void main(String[] args) {
dispHeader("成績表"); // ①ヘッダー表示
String msg = judge(75); // ②点数判定
dispResult(msg); // ③結果表示
dispFooter(); // ④フッター表示
}
mainメソッドが「目次」のような役割を果たしていますね。処理の流れが上から下へ読めるコード——これがメソッド分割の理想形です。
2.Java言語でのメソッドの利用方法は?
①メソッドの定義方法:基本構文をマスターしよう
Javaでメソッドを定義するときの基本構文はこうです。
static 戻り値の型 メソッド名(引数の型 引数名, ...) {
// 処理内容
return 戻り値;
}
各パーツの意味を整理しておきましょう。
| パーツ | 役割 | 例 |
|---|---|---|
static | mainメソッドから呼び出すために必要な修飾子 | static |
| 戻り値の型 | メソッドが返すデータの型 | int, double, String, void |
| メソッド名 | 処理の名前(動詞始まりが原則) | calcPrice, judge |
| 引数 | メソッドに渡す入力データ | int score, double rate |
return | 呼び出し元に値を返す命令 | return result; |
具体的なコードを見てみましょう。定価と割引率を受け取って、割引後の価格を返すメソッドです。
class TestShop {
public static void main(String[] args) {
int price = 24800; // 定価
double rate = 0.7; // 割引率
// calc()メソッドの呼び出し
double ret = calc(price, rate);
System.out.println("割引後の価格は" + ret + "です。");
}
static double calc(int yen, double rate) {
double result;
result = yen * rate;
return result;
}
}
main メソッドから calc() を呼び出し、戻り値を変数 ret で受け取っています。この「呼び出す→処理→受け取る」の流れを体で覚えましょう!
②引数(実引数・仮引数)と戻り値(return文)の役割と書き方
引数には「実引数」と「仮引数」という2つの言葉があります。混乱しやすいので整理しておきましょう。
| 用語 | 意味 | 場所 |
|---|---|---|
| 実引数(アーギュメント) | メソッドを呼び出すときに渡す値 | 呼び出し元(mainメソッドなど) |
| 仮引数(パラメータ) | メソッドを定義するときに受け取る変数 | メソッド宣言部分 |
// 呼び出し元:num が「実引数」
int num = 4;
pow2(num); // ← numの値(4)がpow2メソッドへ渡される
// メソッド定義:src が「仮引数」
static int pow2(int src) { // ← srcに4がコピーされる
return src * src;
}
大事なポイントは、実引数と仮引数は変数名が違っても問題ないということです(上の例では num と src)。値がコピーされるのであって、変数名が一致している必要はありません。
また、戻り値は return 文で返します。引数は複数渡せますが、戻り値は 0個(void)か1個だけ というルールがあります。
// 引数は複数OK
static double calc(int yen, double rate) {
return yen * rate; // 戻り値は1つだけ
}
// 戻り値なし(void)も可
static void showMessage(String msg) {
System.out.println(msg);
// returnは不要(または return; だけ書く)
}
③voidメソッドと値を返すメソッドの使い分け・staticの意味
メソッドには大きく2種類あります。「値を返すメソッド」と「値を返さないメソッド(voidメソッド)」です。
| 種類 | 戻り値の型 | 使いどころ | 例 |
|---|---|---|---|
| 値を返すメソッド | int, double, Stringなど |
計算結果や判定結果を呼び出し元で使いたいとき | 割引価格の計算、合否判定 |
| voidメソッド | void |
画面表示など、処理するだけで結果を返す必要がないとき | ヘッダー・フッターの表示 |
// ✅ 値を返すメソッド(戻り値あり)
static String judge(int score) {
String message;
if (score >= 90) {
message = "優秀賞";
} else if (score >= 60) {
message = "合格";
} else {
message = "再試験";
}
return message; // 文字列を返す
}
// ✅ voidメソッド(戻り値なし)
static void dispResult(String msg) {
System.out.println("判定結果:" + msg);
// return は不要
}
また、static 修飾子について。mainメソッドから直接呼び出すメソッドには static が必要です。これはJavaのクラス設計に関わるルールで、最初の段階では「mainから呼ぶなら static をつける」と覚えておけばOKです。
3.メソッドについて整理しておきたいこと
①実引数と仮引数の関係/値渡しと参照渡しの違い
先ほど触れた「実引数・仮引数」に関連して、もう1つ大事な概念が「値渡し」と「参照渡し」です。
Javaでは、引数の型によって渡し方が変わります。
- 基本データ型(int・double など)→ 値渡し:値のコピーが渡される。メソッド内で変更しても、呼び出し元の変数は変わらない。
- 参照型(配列・Stringなど)→ 参照渡し:メモリ上の「場所」が渡される。メソッド内で変更すると、呼び出し元の変数にも影響が出る。
// 値渡し(基本データ型):呼び出し元は変わらない
static void changeValue(int num) {
num = 99; // コピーを変えているだけ
}
int var = 0;
changeValue(var);
System.out.println(var); // → 0(変わっていない!)
// 参照渡し(配列):呼び出し元も変わる!
static void changeArray(int[] ary) {
ary[0] = 99; // 同じ場所を操作している
}
int[] array = new int[]{0, 1, 2};
changeArray(array);
System.out.println(array[0]); // → 99(変わってしまった!)
「配列を渡したら中身が変わった!」はよくあるバグの原因です。参照渡しの挙動を理解しておくことが、バグを防ぐ第一歩になります。
②return文は1つにまとめる(構造化プログラミングの原則)
コードを書いていると、条件分岐の中に複数の return 文を書きたくなることがあります。でも、構造化プログラミングの考え方では「メソッドの出口は1つにする」が原則です。
// ❌ return文が複数(出口が複数)
static int getA(int param) {
if (param > 10) {
return 1; // 出口1
} else {
return 0; // 出口2
}
}
// ✅ return文を1つにまとめる(推奨)
static int getA(int param) {
int ret;
if (param > 10) {
ret = 1;
} else {
ret = 0;
}
return ret; // 出口はここだけ!
}
また、コーディング規約として return 文に不要な () はつけません。
// ❌ 不適合例
return (value);
return (1);
// ✅ 適合例
return value;
return 1;
小さなことに見えますが、チームで統一されたルールに従うことが、長期的に読みやすいコードベースを守ることにつながります。
③メソッド名の命名規約と、読みやすいコード設計のコツ
最後に、メソッド名の付け方について。良いメソッド名は、コードを読む人(未来の自分やチームメンバー)への「プレゼント」です。
Javaのコーディング規約では、メソッド名の先頭の単語はなるべく動詞にするとされています。
| ❌ わかりにくい名前 | ✅ わかりやすい名前 | 理由 |
|---|---|---|
price() | calcPrice() | 「計算する」という動作が明確 |
name() | getUserName() | 「取得する」「何を取得するか」が明確 |
check() | isValidInput() | 「判定する(boolean を返す)」ことが明確 |
disp() | dispHeader() | 「何を表示するか」が明確 |
また、英単語の対称性にも気をつけましょう。たとえば open と close、get と set、start と stop のように、対になる処理には対称的な名前をつけることで、コードの意図が伝わりやすくなります。
// ✅ 対称性を意識した命名
static void openFile(String path) { /* ファイルを開く */ }
static void closeFile(String path) { /* ファイルを閉じる */ }
static String getUserName() { /* 名前を取得 */ return ""; }
static void setUserName(String name) { /* 名前をセット */ }
こういった積み重ねが、誰が読んでも理解できるプロフェッショナルなコードにつながっていきます。
まとめ
今回はJavaの「メソッド」について、基礎の基礎から現場で使える知識まで解説しました。最後にポイントを整理しておきます。
| テーマ | ポイント |
|---|---|
| メソッドの便利さ | 処理の部品化・再利用・保守性向上。チーム開発でも担当分けがしやすくなる |
| 基本構文 | static 戻り値型 メソッド名(引数) { 処理; return 戻り値; } |
| 引数と戻り値 | 実引数と仮引数は変数名が違ってもOK。戻り値はvoidか1つだけ |
| 値渡しと参照渡し | 基本型は値渡し(呼び出し元は変わらない)、参照型は参照渡し(影響が出る) |
| return文・命名規約 | 出口は1つに。メソッド名は動詞始まり・対称性を意識して命名する |
メソッドをうまく使えるようになると、コードの「設計力」が身についてきます。「このメソッドは何をするメソッドか」を一言で説明できるくらいシンプルにまとめること——それが良いメソッド設計の第一歩です。
まずは今日のコード例を実際に打って動かしてみてください。「手を動かすこと」が理解を10倍速くしてくれます!
次回は「クラスとオブジェクト指向の基礎」について解説予定です。お楽しみに!
