メソッドと関数の違いとは?初心者でも分かるプログラミングの基本を実務目線で解説
結論として、関数(Function)は単独で動作する処理、メソッド(Method)はクラスやオブジェクトに属する処理です。
どちらも「何らかの処理をまとめたもの」という点では同じですが、所属する場所が異なります。JavaやC#などオブジェクト指向言語ではメソッドという言葉がよく使われ、C言語では関数という言葉が使われます。
関数とは
関数(Function)の概要
関数とは、特定の処理をひとまとめにしたものです。
入力(引数)を受け取り、処理を行い、必要に応じて結果(戻り値)を返します。
例えば、税込価格を計算する処理や、年齢を計算する処理などを関数として作成できます。
| 関数の例 | 役割 |
|---|---|
| 税込価格を計算する | 金額を受け取り税込価格を返す |
| 年齢を計算する | 生年月日から年齢を返す |
| 文字数を数える | 文字列の長さを返す |
関数はプログラムのどこからでも呼び出せる独立した処理として利用されます。
メソッドとは
メソッド(Method)の概要
メソッドとは、クラスやオブジェクトが持つ機能です。
オブジェクトのデータを利用しながら処理を行うため、単独では存在できません。
例えば社員クラスなら、社員情報を表示したり、部署を変更したりする処理がメソッドになります。
| クラス | メソッド |
|---|---|
| 社員 | 氏名を表示する |
| 社員 | 部署を変更する |
| 社員 | 給与を計算する |
メソッドは、そのクラスが持つデータを利用できることが大きな特徴です。
メソッドと関数の違い
| 比較項目 | 関数 | メソッド |
|---|---|---|
| 所属先 | 独立して存在する | クラス・オブジェクトに属する |
| オブジェクトのデータ | 基本的に利用しない | 利用できる |
| 主な利用言語 | C言語、Pythonなど | Java、C#など |
| 呼び出し方 | 関数名で呼び出す | オブジェクト経由で呼び出すことが多い |
| 役割 | 共通処理をまとめる | オブジェクトの機能を提供する |
イメージで理解する
社員管理システムを例にすると、次のように考えると分かりやすくなります。
| 処理 | 種類 |
|---|---|
| 消費税を計算する | 関数 |
| 現在の日付を取得する | 関数 |
| 社員情報を表示する | メソッド |
| 部署を変更する | メソッド |
社員の情報を扱う処理は社員オブジェクトに属するためメソッド、どこでも利用できる共通計算は関数として考えると理解しやすくなります。
Javaでは「関数」がほとんど存在しない
Javaでは、すべての処理はクラスの中に記述します。
そのため、Javaで「関数」と呼ばれることがあるものも、正確にはメソッドです。
一方、C言語ではクラスという概念がないため、処理はすべて関数として定義します。
| 言語 | 主に使われるもの |
|---|---|
| C言語 | 関数 |
| Java | メソッド |
| C# | メソッド |
| Python | 関数・メソッドの両方 |
なぜ違いを理解することが重要なのか
設計書やソースコードでは、「この処理は関数として切り出すべきか」「クラスの責務としてメソッドにすべきか」を判断する場面があります。
この違いを理解していると、コードの読みやすさや保守性が向上し、設計意図も把握しやすくなります。
実際のIT現場での利用例
関数が向いている処理
- 税込価格の計算
- 日付のフォーマット変換
- 文字列の変換
- 数値の四捨五入
- 共通計算処理
メソッドが向いている処理
- 社員情報を更新する
- 顧客を登録する
- 商品の在庫を変更する
- メールを送信する
- ログイン処理を実行する
実務では、「オブジェクトの状態を変更する処理」はメソッド、「どこからでも利用できる汎用的な処理」は関数という考え方がよく用いられます。
初心者が混乱しやすいポイント
- メソッドも関数も同じものだと思ってしまう
- Javaでも関数があると思ってしまう
- クラスに属する処理と共通処理の違いが分からない
- 言語によって呼び方が違うことを知らない
「クラスの中にある処理はメソッド」「単独で存在する処理は関数」と覚えると理解しやすくなります。
実務でよくある設計例
| 処理内容 | 適したもの |
|---|---|
| 社員情報を取得する | メソッド |
| 顧客情報を更新する | メソッド |
| 消費税を計算する | 関数 |
| 文字列を大文字に変換する | 関数 |
| 在庫数を変更する | メソッド |
筆者が現場で経験したこと
新人の頃は「関数」と「メソッド」を同じ意味で使っていました。しかし、Javaのレビューで「Javaでは正確にはメソッドです」と指摘されたことがあります。
実際の現場では会話の中で「関数」と表現する人もいますが、設計書や技術資料では「メソッド」と記載されることがほとんどでした。
使用しているプログラミング言語に合わせて正しい用語を使うことで、認識違いを防ぎやすくなります。
新人が覚えておきたいポイント
| やりたいこと | 適したもの |
|---|---|
| 共通の計算処理を作る | 関数 |
| オブジェクトの情報を変更する | メソッド |
| クラスの機能を実装する | メソッド |
| 汎用的な処理を再利用する | 関数 |
ソースコードで確認するポイント
- 処理がクラスの中に定義されているか確認する
- オブジェクトのデータを利用しているか確認する
- 共通処理として切り出せるか確認する
- 責務が適切に分かれているか確認する
- 処理名が役割を表しているか確認する
業務で上司へ報告するポイント
- 修正対象がメソッドか共通関数か
- 影響を受けるクラス
- 共通処理への影響
- 既存機能への影響範囲
- テスト対象
エスカレーションするタイミング
- 共通処理の変更で複数機能へ影響する
- クラス設計の意図が分からない
- 責務の分離方法が判断できない
- 修正範囲が広くなる可能性がある
- 既存設計との整合性が取れない
関連するIT用語
- クラス
- オブジェクト
- インスタンス
- コンストラクタ
- オブジェクト指向
- インターフェース
- 抽象クラス
- 静的メソッド(Static Method)
よくある質問(FAQ)
メソッドと関数は同じ意味ですか?
広い意味ではどちらも「処理をまとめたもの」です。ただし、オブジェクト指向ではクラスに属する処理をメソッド、独立した処理を関数と区別します。
Javaに関数はありますか?
一般的なJavaプログラムでは、処理はすべてクラスの中に定義されるため、正確にはメソッドです。「関数」という言葉が使われることもありますが、技術的にはメソッドを指している場合がほとんどです。
Pythonは関数とメソッドの両方がありますか?
はい。Pythonではクラスの外に定義したものは関数、クラスの中に定義したものはメソッドです。
実務ではどちらの言葉を使うべきですか?
使用しているプログラミング言語に合わせるのが基本です。JavaやC#では「メソッド」、C言語では「関数」と呼ぶと、チーム内での認識を合わせやすくなります。
まとめ
メソッドと関数はどちらも処理をまとめたものですが、所属先と役割が異なります。
- 関数は独立して利用できる処理
- メソッドはクラスやオブジェクトに属する処理
- Javaでは基本的にメソッド、C言語では関数が中心
- 実務では処理の責務に応じて適切に使い分けることが重要
新人エンジニアや社内SEがソースコードを読む際は、「この処理はクラスの機能なのか、それとも共通で使える処理なのか」を意識すると、メソッドと関数の違いを理解しやすくなり、設計の意図も把握しやすくなります。
