Strings of Life

PHP/Phalcon/MySQL/JavaScript/RegExp/Ruby/Perl/ActionScript

タグ:ActionScript

名前の無いpackageの中に定義された関数は、プログラムのどこからでもinport文を使わずに参照できるため、グローバル関数と呼ばれる。

例:
package {
  import flash.system.*;

  public function isLinux () {
    return Capabilities.os == "Linux";
  }
}
isLinux()関数は、flashの実行環境がLinuxであればtrueを返す。この関数は名前の無いpackageの中で定義されているため、import文を必要とせず、プログラムのどこからでも呼ぶことができる。

組み込みのグローバル関数の中で、最も便利なのがtrace()関数である。trace()は可変長の引数を取り、Flashオーサリングツールの出力パネルやログファイルに出力を行う。画面上に直接何かを表示するわけではないので、デバッグ用の関数である。

今日の進捗:199→201/1644

package内のどこでも利用したり、プログラム全体で利用したりできる関数を作るには、packageの本文に直接関数定義を配置する。

その関数を含むpackage内でのみアクセス可能にしたい際はアクセスコントロール修飾子internalを使用する。
例:
package packaneName {
  internal function identifier() {
  }
}
プログラム全体からアクセス可能にするには、アクセスコントロール修飾子publicを用いる。
package packaneName {
  public function identifier() {
  }
}
アクセスコントロール修飾子が設定されていない場合は、ActionScriptは自動的にinternalを用いる。


AdobeのコンパイラーはActionScriptのソースを記述したファイル(.asファイル)に2つの制限を設けている。これらはpackageレベルの関数に影響する。

(1) 全ての.asファイルは外部から見える定義を1つだけ持たなければならない。それは、internal又はpublicとして定義された、クラス・変数・関数・インターフェース・名前空間のいずれかである。

(2) .asファイルの名前は、外部から見える定義の名前と一致しなければならない。

理論上は、ActionScriptはpackageレベルの関数に何らの制限を設けていない。しかし、Adobeのコンパイラーは、packageレベルのinternal/public関数が、関数名に対応した名前をもつ個別の.asファイルに定義されていることを要求している。


外部の.asファイルに定義された関数を別の.asファイルで用いるには、importを行う。
package utilities {
  import flash.system.*;
}

今日の進捗:197→199/1644

関数、より細かく言うなら関数クロージャー(function closure)は、クラスやオブジェクトに関わりなく一定の仕事を実行する個別の命令のことである。関数クロージャーはインスタンスメソッド及び静的メソッドと同様の文法を持っている。

・functionキーワードによって定義する
・ローカル変数を定義できる
・カッコ演算子によって呼ぶ
・値を返すことができる

しかし、オブジェクトと常に結びついているインスタンスメソッドや、クラスと常に結びついている静的メソッドと異なり、関数クロージャーはメソッドの付随的な仕事やパッケージ全体・プログラム全体で利用可能な汎用ユーティリティとして作られる。


ActionScript 3.0の厳密な技術用語としては、関数クロージャーとメソッドは関数の種類である。function(関数)という用語は一般に、呼び出し可能な命令のオブジェクトのことをいう。したがって、関数クロージャーはオブジェクト又はクラスと結びついていない関数のことであり、メソッドはオブジェクトと結びついている関数のことである。もっとも、ふつうの議論や文書では、関数クロージャー(function closure)は関数(function)と縮めて用いられる。ActionScript3の仕様書を読んでいるのでもない限り、関数とは関数クロージャーのことであると想定して差し支えない。


関数を作るには、次のように書く。

function identifier (param1, param2, ...paramn) {
}

書き方はインスタンスメソッド定義と同じである。

関数を呼ぶには、次のように書く。

functionName(value1, value2, ...valuen)


今日の進捗:195→196/1644

インスタンス変数、インスタンスメソッド、静的変数、静的メソッドの概念は、ほとんどのオブジェクト指向言語に存在する。以下は、ActionScript/Java/C++のそれぞれにおける用語の表。

ActionScript Java C++
インスタンス変数 フィールド あるいは インスタンス変数 データメンバー
インスタンスメソッド メソッド メンバー関数
静的変数 クラス変数 静的データメンバー
静的メソッド クラスメソッド 静的メンバー関数

静的メソッドと静的変数はそれを定義したクラスの中でアクセス可能である、というのは既に学んだ通り。例えば、Blogクラスに1つの記事あたりの文字数上限を静的変数としてもたせたとして、その変数にアクセスするには次のように書く。

Blog.maxWords

このコードで、Blogクラスを使っていることは、単なる文法の問題ではない。Blogは実際にmaxWordsを定義しているオブジェクトを参照しているのだ。Blogによって参照されているオブジェクトは、自動的に生成された組み込みのClassクラスである。

ActionScriptにおいて、全てのクラスは実行時にClassクラスのインスタンスとして表現される。プログラマーの観点からは、Classオブジェクトの最も初歩的な利用法は静的変数と静的メソッドにアクセスすることである。しかし、他のオブジェクトと同様、Classオブジェクトは変数に代入可能な値であり、メソッドや関数に渡したり、戻り値にしたりできる。

クラスをオブジェクトに代入して使うテクは、ある.swfファイルから別の.swfファイルのクラスにアクセスしたい時や、画像やフォント等の外部データを.swfファイル内に埋め込む際に用いる。


今日の進捗:191→192/1644

このページのトップヘ