SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Adobe Developer Connection(AD)

JavaとActionScript 3の違い:属性操作編

  • このエントリーをはてなブックマークに追加

ダイナミッククラス

 AS3のObjectには任意の属性を追加することができます。また、存在しない属性名を指定してもコンパイルエラーにはなりません。AS3では、Object以外にも、クラス宣言にdynamicキーワードが付いているクラスは、同じ使い方をすることができます。

// Objectの場合
var foo:Object = new Object();
foo.x = 5;
 
// dynamicキーワード付きでクラスを宣言
public dynamic class Bar {}
var bar:Bar = new Bar();
 
// 下は正常に実行される
bar.x = 5;

 上のサンプルで、Barクラスには何も属性が定義されていません。しかし、xという属性に値を設定するコードが、正常にコンパイルされ、実行されます。これは、xという属性が動的に作成されたからです。もしくは、Barが"x"をキーとして持つMapとして機能すると理解することもできます。

 このように、dynamic付きで宣言されたクラスをダイナミッククラスと呼びます。ダイナミッククラスは、属性やメソッドを実行時に追加したり変更したりできる、変更可能なオブジェクトです。

 ダイナミッククラスのインスタンスに実行時に追加する属性は、実行時のみの存在です。これらの属性の型チェックはコンパイル時には行われません。また、この方法で追加する属性に型注釈を付けることはできません。

public dynamic class Bar {}
var bar:Bar = new Bar();
bar.x = 10;
bar.y = "foo";
 
trace(bar.x, bar.y);
// 10 fooが出力される

 dynamicキーワード付きで宣言されたクラスでは、プライベートな属性にアクセスできません。ドット演算子(.)を使用してアクセスすると、コンパイルエラーが発生します。属性名による参照では、コンパイルエラーにはなりませんが(ランタイムエラーにもなりません)、属性が参照不可のため、undefinedが値として返されます。下の例では、ダイナミッククラスであるBarクラスのprivate属性を参照しようとしています。

public dynamic class Foo
{
  private var bar:String = "プライベートな属性";
}
 
var foo:Foo = new Foo();
trace(foo["bar"]);
// undefinedが出力される
 
trace(foo.bar);
// コンパイルエラーになる

 ダイナミッククラスの詳細はオンラインヘルプのダイナミッククラスをご覧ください。

この記事の続き『JavaとActionScript 3 の違い:振舞い編』は、Adobe Developer Connectionで公開中です。

「FlexではじめるRIA開発」特集、絶賛公開中!

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Adobe Developer Connection連載記事一覧

もっと読む

この記事の著者

上条 晃宏(カミジョウ アキヒロ)

アドビにてFlashプラットフォーム上のユーザー体験やアーキテクチャデザインのコンサルティングを担当、数多くのFlash/Flexプロジェクトに携わる。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5530 2011/05/09 17:15

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング