Home > ActionScript 3.0 > 関数とメソッドの違い[ActionScript 3.0]

関数とメソッドの違い[ActionScript 3.0]

プログラミング経験者なら誰もが一度は思ったことがあると思うこの問題。
言語によって違いはありますが、ActionScript3.0に関して言えば、
書籍やネットを参照しても、答えはまちまちだったりします。
果たして、本当はどれなのでしょうか?

その答えは、本家を見てみることにしましょう。

Adobe ActionScript 3.0 ActionScript 言語とシンタックス 関数

関数 は、特定のタスクを実行し、プログラム内で再利用できるコードブロックです。 ActionScript 3.0 には、メソッドと関数クロージャの 2 種類の関数があります。関数をメソッドと呼ぶか関数クロージャと呼ぶかは、関数が定義されたコンテキストによって決まります。関数をクラス定義の一部として定義した場合、またはオブジェクトのインスタンスに関連付けた場合は、メソッドと呼びます。関数がその他の方法で定義された場合は、関数クロージャと呼びます。

まとめると、

  1. AS3の関数には関数クロージャとメソッドがある(つまり両方とも関数の一種)
  2. static属性キーワードによってクラスに属する関数(いわゆる静的メソッド、Math.sin()・ExternalInterface.call() etc...)や、クラスのインスタンスに関連づけられた場合(MovieClip.gotoAndPlay(),Array.push() etc..)はメソッド
  3. 関数が2以外の方法で定義された場合は関数クロージャとなる。

となります。

簡単に言えばクラス定義に含まれていたらメソッド、それ以外なら関数クロージャとなるわけですが、じゃぁそれ以外って何よ、となります。
例えばgetTimer()はどこのクラスにも関連しせず、flash.utilsパッケージに属するため、関数クロージャです。同様にtraceは、どのパッケージにもクラスにも属さず、トップレベルに属しているため、関数クロージャとなります。
他にも、.imajukさんのエントリーにもあげられているように、メソッド内に定義された関数が関数クロージャになります。

しかし、冒頭でも述べたように実際呼び方に関してはかなり曖昧な使われ方をしているようです。リファレンス中でも、関数クロージャとして定義されているものに対してもメソッドという使われているものもあります。

この関数とメソッドの呼び方の使い分け・違いについての補足・修正は大歓迎しています。いやいやてめーこりゃ違うよ!俺はこうだからこう呼ぶ!っていうのがありましたらじゃんじゃんコメくださいませ。

Summer Camp 2010 野中文雄のActionScript 3.0による 三次元表現

無料  ActionScript 3.0による 三次元表現 in アップルストア 銀座

フィジカルコンピューティング ラボラトリー

Comments:2

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

egoblock@gmail.com 2009年12月15日 23:41

はじめまして。
関数とメソッドの違いがわからず迷っていたらここにたどり着きました。
クラスに属さないパッケージ直下のものは関数クロージャー、
クラス内で定義されているものはメソッドという考え方で間違いないでしょうか。
よろしくお願いいたします。

kaede 2009年12月17日 20:06

>>egoblock@gmail.comさん
はじめまして。
そうですね基本的に仰るとおりです。
ただ、パッケージ直下以外にも、クラス内やメソッド内で定義した無名関数、メソッド内に定義した関数なども関数クロージャということになります。

Trackbacks:0

TrackBack URL for this entry
http://xingxx.com/mt/mt-tb.cgi/38
Listed below are links to weblogs that reference
関数とメソッドの違い[ActionScript 3.0] from xingxx

Home > ActionScript 3.0 > 関数とメソッドの違い[ActionScript 3.0]

Search
Feeds
Tag Cloud

Return to page top