0


0

AS3でゲッター/セッターを合成する

AS3でゲッター/セッターを合成する方法はありますか? 特に数学計算(MVCパターンのモデル)で、公開したい多くの変数を持つクラスがあることは非常に一般的です。 Objective-Cには、getter / setterの生成を可能にする合成プロパティのようなものがありますか?

ありがとう、

Nava

4 Answer


2


あなたは正規表現を試すことができます。 これを試みる前にバックアップを作成してください

たとえば、 private`変数の名前が _str`で、 public`ゲッター/セッターの名前を str`にしたい場合、次のパターンを使用できます。 フレックスビルダー(またはEclipse)でCtrl-Fを押し、正規表現チェックボックスをオンにして、次のパターンを検索に追加し、それぞれ入力フィールドを置き換えます。 次に、「Find」を押してプロパティ宣言を見つけ、「Replace」を押してセッターとゲッターを生成します。

^((\t)+)private\s+var\s+_(\w+):(\w+)\s*;\s*(\n)

$0$5$1public function set $3(value:$4):void$5$1{$5$1$2_$3 = value;$5$1}$5$5$1public function get $3():$4$5$1{$5$1$2return _$3;$5$1}$5$5

このパターンはでテストされました

        private var _str:String;//indented by two tabs

そして正常に生成されました:

    private var _str:String;

    public function set str(value:String):void
    {
        _str = value;
    }
    public function get str():String
    {
        return _str;
    }


2


Flex Builder 3 IDEを使用している場合、コードスニペットを作成および配置するためのプラグインがあります。 ここ:http://www.insideria.com/2008/04/flex-builder-enhancements-snippets-and-todo.html(そのサイトでコンパイルされたいくつかの他の小さいが便利なツールがあります)

これらは、多少快適なゲッター/セッター生成に使用できます。

ただし、追加のコードをそこに配置する必要がある場合にのみ、明示的なゲッターとセッターを作成します。 ゲッターとセッターを使用しない場合、カプセル化が壊れると言う人もいます。 ただし、後でインターフェイスを変更せずにゲッターとセッターを追加できる言語では、これはもう真実ではないと思います。 ユーザーには、プレーン変数assignまたは関数セットvarName(arg:object):voidを使用している場合、完全に透過的です。

また、変数[Bindable]を作成すると(つまり、 明示的なイベント名なしで)、コンパイラーは変数にゲッターとセッターを作成しますが、気づかない場合もあります(もちろん、ゲッターとセッターは既に存在します)。 これは、ゲッター関数とセッター関数を宣言するインターフェイスを実装するためのクイック&ダーティな方法です


1


単にパブリックプロパティにした場合、ゲッターとセッターを心配する必要はありません。

public var str:String;

ただし、プロパティの変更を通知するためにイベントディスパッチのラインに沿って何かが必要な場合は、自分でコーディングする必要があります。 使用しているIDEがこの種のコードを生成することで助けになるか、DIEが挿入できるコードスニペットをセットアップする必要があるかもしれません。

可能な場合は、コピーアンドペーストを避けてください。今後の問題の原因となるものの名​​前を変更し忘れることがあります。


0


編集:IDE(Eclipse)を使用する場合。 クラス→ソース→ゲッターとセッターの生成を右クリックしてください

シンセシスと同じ使用方法ではありませんが、それらを公開するだけでgetMethod()表記を使用する必要がない場合は、このようなキーワードget / setを使用してメソッドを宣言するのに役立ちます。

public function get example() : int
{
             return example;
}
public function set example( value : String ) : void
{
             example = value;
}

アクセスするときに使用すると、変数がパブリックであるかのように使用でき、直接アクセスの代わりにメソッドが呼び出されます