パスワードを忘れた? アカウント作成
545733 journal

argonの日記: Setter/Getter 2

日記 by argon

参照 Setter/Getterを作るのがめんどくさかった

元ねた 今日の役に立たない一言 / グローバル変数の罪

「グローバル変数が便利だったから、あちこちで使った。そしたらそうなった。」
「Setter/Getter をいちいち作るのがめんどくさかった。」

Delphi では、インスタンスの公開メンバは構造型の要素として access できる。

type
    TFoo = class
    public
        Item: integer;
    end

var
    i: integer;
    Foo: TFoo;

begin
    Foo := TFoo.Create;
    Foo.Item := 1;
    i := Foo.Item;
    Foo.Free;
end;

メンバを隠蔽するためには setter/getter を記述する。
Delphi では setter/getter のために property というしくみが用意されている。
定義記述が少々長いが、これは Delphi IDE が自動生成してくれる。

type
    TFoo = class
    private
        FItem: integer;
        procedure SetItem(Value: integer);
        function GetItem: integer;
    public
        property Item: integer read GetItem write SetItem;
    end

property によって setter/getter を陽に呼び出すことなく、
インスタンスの公開メンバ変数と同様に記述できる。

    Foo.Item := 1;
    i := Foo.Item;

Ruby では access method を記述することで setter/getter を実現する。

class Foo
    def item=(v)
        @item = v
    end
    def item
        @item
    end
end

foo = Foo.new
foo.item = 1
i = foo.item

さらに、メンバ変数にアクセスするためのメソッド定義は、短縮記述できる。

class Foo
    attr_accessor :item
end

ここまで簡潔に記述できれば、面倒とは言わないだろうと期待。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by dark_green (28724) on 2005年12月23日 22時35分 (#854471) 日記
    某は本当に「めんどう」でカプセル化をしなかったのだろうか。
    どちらかというと指向を理解していないだけ、ただの言い訳にも見える。

    あと、Delphiとrubyのコードって
    (多分、書いたこと無いからだろうけど)
    一目見ただけだと何を書いてあるかわかりずらいっすね。
typodupeerror

Stay hungry, Stay foolish. -- Steven Paul Jobs

読み込み中...