プログラミングのメソッドとは|定義・書き方・関数との違いを3言語で解説

Mirai

メソッドって何ですか?関数と何が違うのか、全然わからないんですが……。

Zetto

メソッドはクラスの中に定義した関数のことですね。「処理をまとめて名前をつけたもの」と覚えると、役割がつかみやすくなりますよ。

この記事では、プログラミングのメソッドとは何か、基本的な書き方から実務での使い方まで解説します。

本記事の専門性
現役エンジニアのZettoです。Java SilverとJava Goldの資格を持ち、Javaを使ったフリーランス案件を複数こなしてきました。メソッド設計は実務で毎日向き合うテーマです。

この記事を読めば、メソッドの意味・書き方・関数との違い・実務で通用する設計の考え方まで、一通り理解できます。

ぜひ参考にしてみてください。

目次

プログラミングのメソッドとは何か

メソッドの基本

メソッドの基本的な考え方と、混同しやすい「関数」との違いを整理します。

  • メソッドの意味と役割
  • 関数とメソッドの違い

それぞれ詳しく解説します。

メソッドの意味と役割

メソッドとは、「処理をひとまとめにして、名前をつけたもの」です。

メソッドの意味と役割

プログラムを書いていると、同じような処理を何度も書くことがあります。たとえば、消費税を計算する処理を10か所に書くとしましょう。もし税率が変わったら、10か所すべてを直さなければなりません。

メソッドを使えば、処理を1か所にまとめられます。修正が必要になっても、その1か所を直すだけで済みます。

メソッドの主な役割をまとめると、次の通りです。

  • 同じ処理を何度も書かずに済む(コードの再利用)
  • 処理に名前をつけることで、何をしているかわかりやすくなる
  • バグが出たときに修正する箇所が1か所で済む

コードを読む人にとっても、書く人にとっても、メソッドは「コードを整理する道具」として欠かせない存在です。

プログラミングの基礎概念をもっと広く学びたい方は、以下の記事もあわせて読んでみてください。

関数とメソッドの違い

「関数」と「メソッド」は、ほぼ同じ意味で使われることが多いですが、厳密には違いがあります。

関数とメソッドの違いは「クラスの中にあるかどうか」です。

  • 関数(function):クラスの外で独立して定義した処理のまとまり
  • メソッド(method):クラスの中に定義した関数のこと

JavaScriptのような言語では、クラスの外に関数を書くことができます。一方、Javaのような言語では、すべての処理がクラスの中に書かれるため、「関数」ではなく「メソッド」と呼ぶのが正確です。

イメージとしては、「メソッドは関数の一種」という理解で問題ありません。クラスを学ぶ前の段階では、どちらも「処理をまとめて名前をつけたもの」として捉えておけば大丈夫です。

プログラミングにおけるクラスの考え方については、以下の記事でわかりやすく解説しています。

Zetto

「関数とメソッドって何が違うの?」という質問は、プログラミングを学び始めた人がほぼ全員ぶつかるところです。最初は「クラスの中にある関数がメソッド」とだけ覚えておけば十分ですよ。

メソッドの基本の書き方

メソッドの書き方

ここでは、メソッドの実際の書き方を解説します。

  • メソッドの定義と呼び出し方
  • 引数と戻り値の扱い方
  • staticメソッドとインスタンスメソッドの違い
  • Java・Python・JavaScriptで比べるメソッドの書き方

順番に確認していきましょう。

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

メソッドは「定義」と「呼び出し」の2ステップで使います。

ブラウザでも動かしやすいJavaScriptで示します。

// メソッドの定義(クラスの中に書く)
class Calculator {
  add(a, b) {
    return a + b;
  }
}

// メソッドの呼び出し
const calc = new Calculator();
const result = calc.add(3, 5);
console.log(result); // 8

`add` というメソッドを定義して、`calc.add(3, 5)` という形で呼び出しています。

「定義」は「どういう処理をするか」を書く部分、「呼び出し」は「実際にその処理を動かす」部分です。定義しただけでは処理は実行されません。呼び出すことで初めて動きます。

Zetto

引数と戻り値は、最初は「入力と出力」と覚えると混乱しにくいですね。メソッドに何かを入れると、何かが出てくる、そのイメージで十分です。

引数と戻り値の扱い方

メソッドには「引数(ひきすう)」と「戻り値(もどりち)」という仕組みがあります。

  • 引数:メソッドに渡すデータ。メソッドの()の中に書く
  • 戻り値:メソッドが処理した結果として返すデータ。`return` で返す
class TaxCalculator {
  // 引数:price(元の金額)
  // 戻り値:税込み価格
  calcWithTax(price) {
    return price * 1.1;
  }
}

const taxCalc = new TaxCalculator();
const priceWithTax = taxCalc.calcWithTax(1000);
console.log(priceWithTax); // 1100

`price` という引数を受け取り、税込み価格を計算して `return` で返しています。

引数と戻り値をセットで理解することが、メソッドを使いこなす第一歩です。「何を渡して、何が返ってくるか」を意識するだけで、メソッドの読み書きがスムーズになります。

Zetto

引数と戻り値は、最初は「入力と出力」と覚えると混乱しにくいですね。メソッドに何かを入れると、何かが出てくる、そのイメージで十分です。

staticメソッドとインスタンスメソッドの違い

メソッドには大きく2種類あります。

インスタンスメソッドは、クラスからオブジェクト(インスタンス)を作ってから呼び出すメソッドです。先ほどのサンプルコードがこれにあたります。

staticメソッド(静的メソッドとも言います)は、インスタンスを作らずに呼び出せるメソッドです。

class MathUtil {
  // staticメソッド
  static square(num) {
    return num * num;
  }
}

// インスタンスを作らずに呼び出せる
const result = MathUtil.square(4);
console.log(result); // 16

2つの使い分けはシンプルです。

  • インスタンスメソッド:オブジェクトの状態(データ)を使う処理に使う
  • staticメソッド:オブジェクトの状態に関係ない、独立した計算や処理に使う

Javaの `main` メソッドが `static` なのも、プログラムの起動時点ではインスタンスがまだ存在しないからです。

Java・Python・JavaScriptで比べるメソッドの書き方

メソッドの考え方は言語が変わっても共通ですが、書き方(文法)は言語ごとに異なります。

同じ「税込み計算メソッド」を3言語で比べてみます。

JavaScript

class TaxCalculator {
  calcWithTax(price) {
    return price * 1.1;
  }
}

Java

public class TaxCalculator {
  public double calcWithTax(double price) {
    return price * 1.1;
  }
}

Python

class TaxCalculator:
    def calc_with_tax(self, price):
        return price * 1.1

Javaは引数や戻り値の「型(型名)」を明示する必要があります。`double` は小数を扱う型の名前です。

Pythonは `self` という特別な引数が必要で、これは「このクラス自身」を指します。

言語ごとの書き方の違いはありますが、「処理をまとめて名前をつけ、引数を受け取り、戻り値を返す」という考え方はどの言語でも同じです。

Zetto

僕は最初Javaで学んだので、型宣言が当たり前でした。JavaScriptに触れたとき「型を書かなくていいのか」と逆に戸惑いましたね。言語ごとの違いに気づけると、プログラミングの理解がグッと深まります。

実務で使えるメソッド設計の考え方

実務的メソッド設計

メソッドの書き方がわかったら、次は「どう使うか」の設計の話です。

  • メソッドなしのコードと比べてわかる必要性
  • 処理をメソッドに切り出す判断基準
  • 実務で意識する命名のルール

詳しく掘り下げていきます。

メソッドなしのコードと比べてわかる必要性

メソッドがない状態のコードと比べると、メソッドの価値がよくわかります。

メソッドなし(繰り返し書いている状態)

// 注文1の税込み計算
const price1 = 1000;
const priceWithTax1 = price1 * 1.1;

// 注文2の税込み計算
const price2 = 2000;
const priceWithTax2 = price2 * 1.1;

// 注文3の税込み計算
const price3 = 3000;
const priceWithTax3 = price3 * 1.1;

メソッドあり(1か所にまとめた状態)

class TaxCalculator {
  calcWithTax(price) {
    return price * 1.1;
  }
}

const calc = new TaxCalculator();
console.log(calc.calcWithTax(1000)); // 1100
console.log(calc.calcWithTax(2000)); // 2200
console.log(calc.calcWithTax(3000)); // 3300

メソッドなしのコードは、税率が変わると全箇所を修正しなければなりません。

メソッドありなら `1.1` を1か所直すだけで済みます。コードの量も減り、修正ミスも起きにくくなります。

処理をメソッドに切り出す判断基準

「どのタイミングでメソッドにするか」は、実務でよく迷うポイントです。

メソッドに切り出す目安は次の通りです。

  • 同じ処理が2回以上出てくる
  • 処理の塊が10行を超えてきた
  • 処理に名前をつけると意味が伝わりやすい
  • 別の箇所でも使えそうな汎用的な処理になっている

逆に、メソッドに切り出しすぎるのも考えものです。1行しかない処理を毎回メソッドにしていると、コードが細かくなりすぎて逆に読みにくくなります。

僕が実務で意識しているのは「このコードの意味を一言で説明できるか?」という基準です。説明できないなら、メソッドとして名前をつける価値がある処理です。

プログラミングの関数・メソッドに関連した考え方は、以下の記事でも詳しく解説しています。

実務で意識する命名のルール

メソッド名は「読んだだけで何をするかわかる名前」にすることが大事です。

悪い命名の例

calc()       // 何を計算するの?
doSomething() // 何をするの?
process()    // どんな処理?

良い命名の例

calcTaxIncludedPrice() // 税込み価格を計算する
getUserById()          // IDでユーザーを取得する
validateEmailFormat()  // メールアドレスの形式を確認する

実務で意識している命名のポイントは次の通りです。

  • 動詞から始める(get, set, calc, validate, create, deleteなど)
  • 何を対象にした処理かを名前に含める
  • 省略しすぎない(`calc` より `calcTaxIncludedPrice`)
  • 1メソッドで1つのことだけする(名前に「and」が入り始めたら切り出すサイン)

命名は後から変えにくくなります。最初から読みやすい名前をつける習慣をつけておくと、チームでのコードレビューでも指摘を受けにくくなります。

Zetto

実務では「コードを書く時間より読む時間の方が圧倒的に長い」んですよね。だからこそ命名に時間をかける価値があります。名前がわかりにくいメソッドはそれだけでチームの生産性を下げる原因になります。

よくある質問

よくある質問

よくある質問と回答をまとめました。

  • void(戻り値なし)と戻り値ありはどう使い分けますか?
  • メソッドが増えすぎるとコードは読みにくくなりますか?
  • 独学でメソッド設計の感覚はつきますか?

void(戻り値なし)と戻り値ありはどう使い分けますか?

戻り値があるメソッドは「結果を呼び出し元に返したいとき」に使います。

戻り値なし(JavaScriptでは `return` を書かない。Javaでは `void` と書く)は「処理だけ行い、結果を返す必要がないとき」に使います。

class Printer {
  // 戻り値なし:画面に表示するだけ
  printMessage(message) {
    console.log(message);
  }

  // 戻り値あり:計算結果を返す
  double(num) {
    return num * 2;
  }
}

判断基準はシンプルで、「呼び出し元がその結果を使うかどうか」です。計算して別の処理に使うなら戻り値あり、表示や保存だけで完結するなら戻り値なしでOKです。

メソッドが増えすぎるとコードは読みにくくなりますか?

増えすぎると確かに見通しが悪くなります。ただ、問題はメソッドの数よりも「整理されているかどうか」です。

整理されたメソッドが多いコードは読みやすいですが、関連性のないメソッドが1つのクラスに詰め込まれると混乱します。

目安として、1つのクラスのメソッドが10〜15を超えてきたら「このクラスが複数の役割を持ちすぎていないか」を見直すといいですね。

Zetto

実務でも「このクラス、メソッド多すぎない?」という会話はよくあります。クラスを分割する判断も、エンジニアの大事なスキルのひとつです。

独学でメソッド設計の感覚はつきますか?

つきます。ただ、時間はかかります。

効果的な方法は「他人のコードを読む」ことです。GitHubに公開されているオープンソースのコードや、フレームワークのソースコードを読むと、実務レベルのメソッド設計が見えてきます。

もう1つ効果的なのは、「自分が書いたコードをあとで読み直す」ことです。1週間後に自分のコードを読んで「わかりにくい」と感じたら、それがリファクタリング(コードを整理し直すこと)のサインです。

独学でプログラミングを進めている方は、以下の記事も参考にしてみてください。学習のスタート方法を具体的にまとめています。

メソッドを使いこなして、コードの質を上げよう

メソッドで品質向上

メソッドとは「処理をまとめて名前をつけたもの」です。この記事で解説した内容を振り返ります。

  • メソッドはコードの再利用性と可読性を高める道具
  • 関数との違いは「クラスの中に定義されているかどうか」
  • 引数で受け取り、戻り値で返すのが基本の形
  • staticとインスタンスの使い分けは「オブジェクトの状態を使うかどうか」
  • 名前は「動詞+対象」でわかりやすくつける

メソッドは、プログラミングを学んでいくうえで何度でも登場する概念です。最初は難しく感じても、実際にコードを書くうちに「あ、これがメソッドか」と自然に感覚がつかめてきます。

まず今日中に、自分で1つメソッドを書いて呼び出してみてください。動いた瞬間に理解がグッと深まります。

Mirai

メソッドって、「処理に名前をつける道具」なんですね。なんとなくわかってきました!

Zetto

そうですね!名前をつけることでコードが読みやすくなって、直しやすくなる。その積み重ねが、実務で通用するコードにつながっていきますよ。

エンジニアとしてのスキルをさらに伸ばしたい方は、以下の記事でエンジニアに必要なスキルをまとめています。あわせて読んでみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次