Perlゼミ

  1. Perl
  2. オブジェクト指向
  3. アクセサ

アクセサを生成する

今回はアクセッサを作成してみましょう。

1. アクセッサとは何か?

オブジェクト指向ではデータを直接いじっては駄目です。オブジェクト指向ではオブジェクトに対するアクセスは公開されたメソッドを通じて行うのが正しい作法だからです。

my $book = Book->new;

# 駄目!
$book->{title} = 'aaa';

データをいじる場合は、アクセッサを通じて行います。アクセッサとは、データを変更したり取得したりするためのメソッドのことを言います。

以下のようにアクセッサを使ってデータに値を設定するのが正しい作法です。

my $book = Book->new;
$book->title('aaa');

クラスを作成する側は、アクセッサを作成して公開する義務があります。

2. アクセッサの作成

では早速アクセッサを作成してみましょう。Perlでは、値を取得するのにも、値を設定するのも同じアクセッサを使って行うというのが一般的です。

(Perlベストプラスティスという本では、設定のためのアクセッサと取得するためのアクセッサは分けるべきだと書いてありますが、CPANなどの実際で見ると、アクセッサはひとつだけ作ることが好まれているようです。)

sub title {
  my $self = shift;
  if (@_) {
    $self->{title} = $_[0];
  }
  return $self->{title};
}

$self には、オブジェクトが入ってきます。それで、@_に値があった場合は、$_[0] を $self->{title} に設定しています。

最後の行で$self->{title} を返却しています。

3. 値が設定された場合は、古い値を返却するアクセッサを作成する

上記のアクセッサのほかに、値が設定された場合に古い値を返却するように実装しているアクセッサも一般的です。

my $book = Book->new(title => 'aaa');
my $old_val = $book->title('bbb');

古い値を返すアクセッサは以下のように作成します。

sub title {
  my $self = shift;
  if (@_) {
    my $old = $self->{title};
    $self->{title} = $_[0];
    return $old;
  }
  else {
    return $self->{ title };
  }
}

これで、コンストラクタとアクセッサの解説が終わりました。後は好きなメソッドを追加していけばよいだけですね。

Perlの書籍
  • 業務に役立つPerl

    ログ解析など日本語を含むテキスト処理の実践!
    この私、Perlゼミの作者が執筆しています。
    ご購入、口コミ歓迎。
  • Perlの書籍 »
自己紹介
木本裕紀

「こっ、こしゃくな。
このPerオタクめ~!」

Twitter
フォロー、いいね、リツート、コメント歓迎

Youtube

チャンネル登録、いいね、コメント歓迎

kimoto.yuki@gmail.com
応援メッセージ、質問、間違い報告歓迎

木本システム株式会社
ご紹介キャンペーン実施中です。契約金額の10%をご紹介料としてお支払い。

(例)30万円のシステム開発委託契約が、1年続いたら、36万円がもらえる!!!