アクセサ

最終更新日時:2009-04-20 19:30:50
Perl

アクセサとは


Perlに限った話ではないのですが、一般にオブジェクトの属性値にアクセスするためのメソッドをアクセサと呼びます。
アクセサは、値の設定(setter)、値の参照(getter)の2つのメソッドからなります。
アクセサを用意するメリットはいくつかあるのですが、私がPerlでアクセサを使用する際の最大のメリットは、アクセサを持つクラスと Template-Toolkit の相性が非常に良いことです。
また、Perlでは自力でアクセサを用意しなくても、簡単に生成する方法があるので、かなりお手軽にアクセサを用意することが可能です。
ここでは、そのうちのいくつかを挙げておきます。

なお、「オブジェクトの属性値」とは主にメンバ変数の場合が多いですが、一般的にはメンバ変数に限るというわけではありません。
ただし、ここで挙げる手法ではアクセサで設定/参照できる属性値はメンバ変数となります。

Class::Accessor


おそらく一番スタンダードなアクセサモジュール。
ただし、通常の用途としては多機能すぎるので、私自身は使ったことはありません。

Class::Accessor::Fast


Class::Accessor の簡易版。
機能を落とした最適化されて若干高速化されているらしい。
CGI.pmとの相性が悪いみたいなので私自身はあまり使っていませんが、おそらく一番スタンダードなモジュール。

使用方法


Class::Accessor::Fastは継承して使います。
以下のように継承し、mk_accessorsでアクセサを生成する名称を指定します。

 use base qw/Class::Accessor::Fast/;
 __PACKAGE__->mk_accessors(qw/ method1 method2 /);


上記の場合、method1, method2とう名称のアクセサが生成されるので、$self->method1 で $self->{method1}の値を取得し、$self->method1($data)で$dataを$self->{method1}に代入することが出来るようになります。

Class::Data::Accessor


Class::Accessor::Fastと似ているが、こちらはCGI.pmと両方継承をすることができるので、私は主にこれを使っています。
また、以下のようにしてデフォルト値を設定することが可能です。

 __PACKAGE__->template(undef);


お問い合わせは 掲示板 にて。