x.x.x.x

| HOME | FrontPage | 記事編集 | RSS |

Perlのオブジェクト指向   Perl

  1. 1. でもやるな
  2. 2. でもなるべく使おう

出るのか出ないのか既に誰にも分からないPerl6ではありますが、Perl6でオブジェクト指向(以下OOP)が強化されるということで、Perl5のOOPをやってみた。要するにこれは何が便利なのかというと

グローバル変数(クラス変数)を使える

そんなのもともと使えるじゃないか。いや

use strictでエラーにならない

グローバル変数が増えるたびにuse vars qw($global); や ours($global); を増やすのも意外に面倒です。たとえば

package Session;
sub new {
    my($class,$fname)= @_;
    my $this  = {};
    $this->{'fname'} = $fname;
    return bless $this,$class;
}

これはSessionクラスのコンストラクタです。呼び出し側は以下です。

my $obj = Session->new('session.txt');

引数のsession.txtは、クラス外のどこからでも

$obj->{'fname'}

クラス内のどこからでも

$this->{'fname'}

で参照できます。

# $thisはクラスメソッドの第一引数

1. でもやるな

クラス内からは良いのですが、クラス外からやりたければ参照・更新用のメソッドを作れと、一般的には言われています。なぜならPerlはPrivateなクラス変数を定義できないからです。ただしメソッドはメソッドでPrivateなメソッドを定義できるわけじゃなし(命名がアンダーバーで始まるメソッドはPrivateとして扱う紳士協定はあります)、OOPは何でも禁止の上に成り立つ物です。あれこれ禁止することで誰もが同じようなコードを書くように強制する、コーディング規約の一種なので、何も禁止しないPerlとの相性は非常に悪く、OOPの参考書に書いてあるような面白おかしい類のものじゃない。use strictにしても自分を縛って悶死した読売新聞社社員と同じような機能ですよ。それでもuse strictを使うのは、局所変数名などのtypoを拾ってくれるからです。OOPは見返りが特に無い。

2. でもなるべく使おう

これはつまりシェアの争奪戦をやってるんです。OOPが増えたのは、主に宣伝広告部門で、構造化プログラミングとのシェア争奪戦に勝ったからです。シェアが増えれば技術者の価値が上がります。価値とは給料のことです。次に起こるのは言語の選択です。Perl6のOOPにPerlと、Perl技術者自身の運命がかかっています。だからなるべく慣れて、いやいやPerl6のOOPこそ最強なんだと、Perl6が出た瞬間、全ての技術者が言える状態が望ましい。

BlogMode speed member / 2008.02.17 12:26

These pages are designed for NN7 & IE6.
BBSWiki ver.1.50 Final blogmode.
Copyleft (!C) 2005-2007 SUICIDE BLONDE JP.
All Lefts Reserved.

Valid XHTML 1.0 Strict Valid CSS!