argonの日記: Setter/Getter 2
参照 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
ここまで簡潔に記述できれば、面倒とは言わないだろうと期待。
感想とか (スコア:1)
どちらかというと指向を理解していないだけ、ただの言い訳にも見える。
あと、Delphiとrubyのコードって
(多分、書いたこと無いからだろうけど)
一目見ただけだと何を書いてあるかわかりずらいっすね。
Re:感想とか (スコア:1)
似た行動にいたる動機づけになるかもしれません。