関数とメソッド・・・プログラミングをしていると頻繁に出てくる用語ですよね。
実はこの2つは全く同じものではなく微妙に意味が違います。
どちらを使っても「まとまった処理の手続き」だと人には伝わりますが、できるなら正確に使い分けできた方が誤解を生みにくくなります。
そこでこの関数とメソッドの意味と違いについて分かりやすくまとめました。
関数(ファンクション)の正しい意味について
まず関数(ファンクション)という言葉の意味について
これは一言で言うと「それ自体が独立していて単独で呼び出される処理」を表しています。
つまりオブジェクト指向みたいにクラス内に定義されるわけじゃなく、その外側で定義されているものがそう呼ばれているということです。
例えば次はPHPでの関数のコード例
1 2 3 4 5 6 7 |
/** 関数の定義 */ function func(){ print_r('This is function'); } /** 関数の実行 */ func(); |
上コードみたいに関数自体が独立しているので、実行する時も func(); みたいに単独で実行できるのが関数の特徴ですね。
もう1つ例を挙げて考えてみます。例えば次がJavaSciptでの関数のコード例
1 2 3 4 5 6 7 |
/** 関数の定義 */ function func(){ console.log('This is function'); } /** 関数の実行 */ func(); |
JavaScriptの場合も全く同じで独立して呼び出されるのが関数です。
ここまでのコード例でも分かるように
「独立して定義&呼び出しできるもの」
これが関数(ファンクション)という言葉の意味です。返り値とか戻り値は一切関係ありません。
メソッドの正しい意味について
お次はメソッドという言葉の意味について
これは「クラス内で定義される独立していない関数のこと」という解釈でOKです。"独立していない"というところが重要なポイントですね。
ちなみにメソッドは関数の一種なので メソッド ⊂ 関数 みたいな関係もあります。関数の拡張版がメソッドという風にイメージしてもらうと理解しやすいかも
それでこのメソッド、Javaとかのオブジェクト指向型の言語を使うと頻繁に登場します。
例えばJavaで関数を定義するときは次コードみたく常にメソッドとして定義しないといけません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.util.*; public class Main { /** メソッドの定義 */ public static void func(){ System.out.println("This is method."); } /** これもメソッド */ public static void main(String[] args) throws Exception { /** メソッドの実行 */ Main.func(); } } |
Main っていうクラスがあってその中に func とか main とかの関数が定義されていますよね。こういう風にクラス内で定義された関数は全てメソッドという言葉で呼ばれます。
ちなみにJavaは他言語と違い、クラス内にしか関数定義できないので独立した関数を作れません。
もう1つメソッドの例を出します。
例えば次がPHPでクラス内に関数定義して呼び出しているコード例
1 2 3 4 5 6 7 8 9 10 |
class Hoge{ /** メソッドの定義 */ function func(){ print_r('This is method.'); } } /** メソッドの呼び出し */ $hoge = new Hoge(); $hoge->func(); |
上コードでしていることを簡単にまとめると次の通り
- まず Hoge クラスを作り、その中に func という関数(メソッド)を作成
- その後 $hoge = new Hoge(); みたいにクラスの実体(インスタンス)を作成
- 最後に $hoge->func(); としてインスタンスからメソッドを実行
オブジェクト指向ではクラスが実体化されるとインスタンス(つまり変数)になります。
このインスタンス経由でメソッド呼び出しして初めて実行できる訳です。独立した関数と違って単独で呼び出せないのが大きな違いですね。
ということで以上で説明したみたいに
「クラスで定義されインスタンス経由で呼ばれるもの」
これがメソッドの大まかな定義です。厳密には少し違うかもしれないですが、メソッドという言葉を理解するだけなら難しく考える必要はありません。
関数とメソッドの違いまとめ
では関数とメソッドの意味についてもう一度おさらい
- 関数の意味
それ自体が独立して定義できて、独立して呼び出しできるもの
- メソッドの意味
クラス内で定義され、インスタンス(クラスの実体)から呼ばれる関数の一種
意味的には関数の方が広い概念で、メソッドはその一種ということになります。なのでもし関数なのかメソッドなのか迷ったときは「関数」を使えば間違いありません。
まあ両者の違いは些細なものなので厳密に理解する必要もないと思いますが・・・でも人から聞かれたときにサッと説明できると格好いいですよね。笑
以上、関数とメソッドの意味と違いについてでした。