サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

9. 黙示的なget/setメソッド

ID: FN0311009 Product: Flash

Platform: All
Version: Flash MX 2004

オブジェクト指向プログラミングを実践する際には、クラスのプロパティに直接アクセスすることは推奨されません。クラスではよく、特定のプロパティの読取り用のアクセスに"get"メソッド、書込み用のアクセスに"set"メソッドを定義するということが行われます。たとえば、クラスにuserNameというプロパティがあるとします。

var userName:String;

このときクラスのインスタンスからプロパティに直接アクセスさせる(たとえば、obj.userName = "Jody")のでなく、クラスに2つのメソッドgetUserNameとsetUserNameをつぎのように実装します。

function getUserName():String {
  return userName;
}

function setUserName(name:String):Void {
  userName = name;
}

上記では、getUserNameはuserNameの設定値を返します。そして、setUserNameは、userNameの値に、メソッドの引数として渡されたストリングを設定します。クラスのインスタンスは、つぎのようなシンタックスを使って、userNameプロパティの取得または設定を行いすま。

// "get"メソッドの呼出し
var name = obj.getUserName();
// "set"メソッドの呼出し
obj.setUsername("Jody");

しかし、もっと簡潔なシンタックスを使いたいときは、「黙示的」(implicit)なget/setメソッドを使用します。黙示的なget/setメソッドなら、クラスプロパティに直接的なスタイルでアクセスできます。しかも、オブジェクト指向プログラミング(OOP)を正しく実践するという点は変わりません。

これらのメソッドを定義するには、'get'および'set'メソッド属性(attributes)を使用します。プロパティを取得(get)あるいは設定(set)するメソッドを作成して、キーワード'get'または'set'をメソッド名の前に加えます。

function get user():String {
  return userName;
}

function set user(name:String):Void {
  userName = name;
}

'get'メソッドは、引数を取ることができません。'set'メソッドは、必要なただひとつの引数のみを取る必要があります。'set'メソッドは、'get'メソッドと同一のスコープで同じ名前にすることができます。'get'/'set'メソッドは、他のプロパティと同じ名前にすることはできません。たとえば、上記のサンプルコードは、'get'および'set'メソッドをuserという名前で定義しています。そうすると、同じクラスのなかに、さらにuserという名前のプロパティをもつことはできません。

通常のメソッドとは異なり、'get'/'set'メソッドは括弧や引数なしに呼出されます。たとえば、以下のシンタックスを使うと、上記に定義した'get'や'set'メソッドが使用されて、userNameの値にアクセスしたり、それを変更したりすることができます。

var name = obj.user;
obj.user = "Jack";

注記: 黙示的な'get'/'set'メソッドは、ActionScript 1の'Object.addProperty()'メソッドをシンタックス的に簡潔にしたものです。

[訳者註]ActionScript 1の'Object.addProperty()'メソッドについては、[ActionScriptリファレンスガイド]>[ActionScript 1でのオブジェクト指向プログラミングの概要]>[ActionScript 1でのgetter/setterプロパティの追加]および[ActionScript辞書]のメソッド解説をご参照ください。

出典
ActionScript Reference Guideより邦訳。

_____
作成者: 野中文雄
作成日: 2003年11月28日


Copyright © 2001-2003 Fumio Nonaka.  All rights reserved.