• ベストアンサー

関数とメソッドの違い

初歩的な質問なのですが、 関数とメソッドの違いが分からず悩んでいます。 書籍や人によって、 関数とメソッドは同じ物として書いている物もあれば、 メソッドはクラスに関連付いた関数としていたり、 クラスでもpublic関数だけとか、 引数のある物がメソッド、 逆に無い物がメソッド等々…で、 どれが正しいのか良く分からないのです。 関数とメソッドの違いを教えていただけますよう、 お願いいたします。

  • PVOID
  • お礼率80% (29/36)

質問者が選んだベストアンサー

  • ベストアンサー
  • shin_say
  • ベストアンサー率100% (2/2)
回答No.13

正解だけ先に言っておきましょう。オブジェクト指向での定義は 「メソッドとは、オブジェクトに送られてきたメッセージを処理するモノ」 「関数とは、メソッドの実装」 ついでに、 「メッセージとは、オブジェクトに何かしらお願いするために送られるモノ」 です。メッセージとメソッドと関数は明確に違うのですよ。 上記の通りなんですが、質問の文について、なにが正しいか、という解答は「文脈による」としか言いよ うが無いんです。 解説書の一部分だけ抜き出して考えるのは非常に危険な行為です。 文脈を色々変えてみます。例えばオブジェクト指向の話をしているとしたら、 >1. 関数とメソッドは同じ物として書いている物もあれば、 バツ。意味的に全く異なります。 '\0'と""とNULLと0くらい違います。等価なんていってしまったら石が飛びます。(私が投げます:-p) > 2.メソッドはクラスに関連付いた関数としていたり、 サンカク。C++での実装はそうでしょうが、オブジェクト指向を考える上で、その考え方は危険です。 > 3.クラスでもpublic関数だけとか、 > 引数のある物がメソッド、 > 逆に無い物がメソッド等々…で、 バツ。引数の数でメソッドで無くなる?そんなバカな! 例えprivateでもメソッドですよ。 オブジェクト指向言語C++のことを考えよう!という文脈ならば、 1.サンカク。実装は確かにそうなってます。ですが、上記の通り意味的に違うんです。 2.○。C++において、メソッドは「クラスに関連ついた関数」として実装されてます。 3.そんなわけないでしょう。 オブジェクト指向?なにそれ?構造体に関数がくっついただけでしょ?と乱暴極まりない文脈なら、 1.○。当然! 2.なにいってるの? 3.サブルーチンとファンクションの違いだ! と、文脈で全然変わるんですよ。これに関しては、本一冊だけだとなかなか気付きにくいです。 是非とも多数の本を読み比べることをお勧めします。

PVOID
質問者

お礼

ご返答ありがとうございます。 うーん、文脈で意味する所が変わってしまうのか… 単純な事かと思っていましたが、 意外と複雑な事だったようで。 皆様方のご意見とても為になりました。

その他の回答 (13)

  • JeanneNet
  • ベストアンサー率48% (100/208)
回答No.3
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

まず、ここが一番大事なのですが、CやC++には「メソッド」というものはありません。C++にあるのは「メンバ関数」であってメソッドではありません。 これに対して、C#やObjective-Cには「メソッド」が存在します。 C/C++において「メソッド」といっているのは、他の言語からの類推または混同によるもので、関数のことを「サブルーチン」というのと大差ありません。

PVOID
質問者

お礼

ご返答ありがとうございます。 私としてはクラスのメンバ関数がメソッドの事で、 メンバ関数と言う言い回しは、C/C++の方言だと考えていたのですが、 改めて調べ直すと、他の方々のご返答のように、 人によってまちまちなので、何が正しいのか確信がもてなくなりました。 多くの方々から、ご返答を頂けましてありがたいのですが、 結局のところ、どなたのご意見が正しいのでしょうか。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

普通メソッドとは クラスのメンバ関数の事を指します。 class A{ void Fnc(); //class Aのメソッド あるいはメンバ関数 }; // ただの関数 少なくともこれをメソッドとは言わない void Fnd(){ }

PVOID
質問者

お礼

ご返答ありがとうございます。 私としてはクラスのメンバ関数がメソッドの事で、 メンバ関数と言う言い回しは、C/C++の方言だと考えていたのですが、 改めて調べ直すと、他の方々のご返答のように、 人によってまちまちなので、何が正しいのか確信がもてなくなりました。 多くの方々から、ご返答を頂けましてありがたいのですが、 結局のところ、どなたのご意見が正しいのでしょうか。

関連するQ&A

  • 関数とメソッドの違い

    Pythonで 関数とメソッドの違いはなんですか? 関数の()かっこのなかは引数ですよね? では、 メソッドの()かっこのなかはなんとよぶんでしょうか?

  • 「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。

    「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。 あるサイトに、「クラス関数」=「メンバ関数」と書かれていました。 「メンバ関数」=「メソッド」だと思っているのですが、 そうすると、「クラス関数」=「メンバ関数」=「メソッド」という認識で間違いないでしょうか?

    • ベストアンサー
    • PHP
  • 関数とメソッドって違うものですか?(JAVA)

    現在0からJAVAを勉強していますが、関数とメソッドの違いがわかりません。 過去ログにC/C++カテゴリーで同様の質問がありましたが高度なんだか、言語が違うからなのかわかりませんでした。 関数とメソッドってどう区別できるのでしょうか? (”インスタンス.”の後ろには関数もメソッドも来ることができますよね?) (かっこも後ろについていますが、あれの意味もわかりません)

  • 「static宣言されているメンバ関数」は、「インスタンスメソッド」な

    「static宣言されているメンバ関数」は、「インスタンスメソッド」なのでしょうか? それとも、「クラスメソッド」なのでしょうか? 先日、下記内容で質問して、その時は分かったつもりだったのですが、 やっぱり分かってなかったようなので、教えてください。 ▽「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。   http://okwave.jp/qa/q5858806.html 例) ▽前提 ・Aクラスのインスタンスa ・static宣言されたpublicメソッド「static_public_method」 ・static宣言されていないpublicメソッド「public_method」 ▽メンバ関数呼び出し ・$a->static_public_method() ・A::static_public_method() ・A::public_method() このとき、「$a->static_public_method()」は、インスタンス経由でアクセスすることになるので、 「インスタンスメソッド」になるのでしょうか。それとも、static(静的)宣言しているので、「クラスメソッド」になるのでしょうか? また、「A::static_public_method()」や、「A::public_method()」は、どちらになるのでしょうか? ※現在、頭の中がこんがらがっているのは、下記3点です。どれかひとつでも構わないので、分かりやすい考え方等あれば、ぜひ教えてください。 ・「static宣言したメンバ関数」は、「インスタンスメソッド」? 「クラスメソッド」? ・「スタティック」宣言してるのに、メンバ関数へ、「->(アロー演算子)」(オブジェクト経由)でアクセスできる理由 ・「A::static_public_method()」と「A::public_method()」の違い

    • ベストアンサー
    • PHP
  • uasort()でクラスのメソッドは呼べますか?

    2次元連想配列の指定項目をソートするのに、uasort()を使いたいのですが、 uasort()で指定する関数に任意の引数は渡せず、固定の項目しかソートできません。 uasort($rensouArray,"comparar"); 関数ではなくクラスのメソッドが指定できば引数を渡せなくてもクラスのプロパティで渡せると思いましたが、 以下の書き方ではクラスのメソッドは呼べませんでした。 uasort($rensouArray,$this->$comparar()); http://jp.php.net/manual/ja/function.uasort.php の注意書きで、関数名の代わりに、オブジェクトへのリファレンスを格納した配列とメソッド名を指定することも出来ます。とありますが、書き方がわからず困っています。

    • 締切済み
    • PHP
  • オフィス2010 今まで関数だったのがメソッドに

    オフィス2003からオフィス2010にしたのですが vbaのオブジェクトブラウザを見ていると、今までヘルプには関数として書かれていたのもが メソッドになってるのですが、変わったのですか? たとえば、WorksheetFunctionクラスのCountなんて、もろ関数だと思うのですが、 F1を押してヘルプを見ると「WorksheetFunction.Count メソッド」となっています。 関数とメソッドは同じ意味なのでしょうか?

  • staticメソッドにするかどうかの判断

    staticメソッドの使いどころについて質問させてください。 まず、メソッドの内部で、そのメソッドが定義されているクラスのイ ンスタンス変数を使用している場合は、そのメソッドはインスタンス に依存するので、インスタンスメソッドにしかできないのはわかり ます。疑問なのは、「じゃあこのメソッド内でインスタンス変数を使 わないで引数で渡せるように作れば、インスタンスに依存しないの でstaticにしていいの?」(※)ということです。 さらにこうも思います。 なんとなくですが、※のようなことをしたらオブジェクト指向の意味 がない気がします。理由ははっきりわかりません。ほんとになんとなく です。(奇跡的にあたっていたとしても、理由を教えて下さいm(_ _)m) そして、さらに混乱するのが、ユーティリティの関数などでstaticメ ソッドになっているのを見ました。この場合はどうしてメソッドの引 数を指定するようにしていて、クラスのインスタンス変数を使うこと はしないのか。 以上、大変下手な文章ですが、混乱しているポイントが伝わったでし ょうか? よろしくお願いします。

  • 文字列の数字部分を取り出す関数・メソッド

    こんにちは。 ある文字列から、数値部分を取り出す関数やメソッドは存在するのでしょうか? たとえば、  引数:"abc123"→戻り値:123  引数:"a1b2c3"→戻り値:1 ※はじめに見つかった数値 という感じです。 無いのであれば、自作しようと考えているのですが…。

  • javaのメソッド呼び出し

    javaで質問があります。メソッドを呼び出すとき、 クラス.メソッド(引数)だと思いますが、 「.」が2つあるものがあります。 どういったものでしょうか? あるプログラムに Code.PerComFlag.ReCom.equals(atmlogDTO.getatmComFlg()) のがありました。 また、javaの本に System.out.println(・・・) という記述もあります。 よろしくお願いします。

    • ベストアンサー
    • Java
  • javaのメソッドの引数で、クラスの配列を指定する

    javaのメソッドの引数で、クラスの配列を指定する事は可能なのでしょうか? 受け取るメソッドでは引数の所に何と書けば良いのでしょうか? 教えてください!

    • ベストアンサー
    • Java