// 下階層用テンプレート
#topicpath
----
あまり詳しくないのですが、Perlでもオブジェクト指向的なコーディングができます。それの覚え書きです(2004/08/09現在、勉強初日っ)。

***クラスの書き方 [#r5228a78]
どうもPerlの言語仕様をライブラリで拡張して、オブジェクト指向対応にしました、的な感触を受けたのですが(私がよく理解してないだけでしょうね)、こんな書き方をするみたいです。
 package Class1; # クラス名
 
 sub new { #コンストラクタ
 	$pkg    = shift; #クラス名がはいる
 	return bless {}, $pkg; #<-Class1インスタンスへの参照を返す、の意味らしい。
 }
 
 sub hoge { #メソッド
 	return "Hello Perl World.";
 }
 
 1; #これは何だろう。。。
これをClass1.pmという名称で保存しておきます。呼出側は、
 #!/usr/bin/perl -w
 
 package main;
 
 use Class1;
 
 my $obj = Class1->new;
 print $obj->hoge;
とすればインスタンス化、メソッド呼出というクラス的な使い方ができます。

***フィールドを宣言とか、フィールドをメソッド内で共有する [#ccc495f1]
Perlではフィールドへのアクセス((そもそもフィールドかどうかも理解してないけど))は

 #Class1クラスの作成
 package Class1;
 
 #コンストラクタ
 sub new {
 	my $class = shift;
 	my $self  = {
 		X => 10,
 		Y => 100
 	};    #結局はこのself変数がJavaのthisなので、
 	      #この中の変数達がフィールドと考えるのかなぁ?
 	return bless $self,
 	  $class;    #<-Class1インスタンスへの参照を返す、の意味らしい。
 }
 
 #メソッドの宣言
 sub hoge {
 	my $self = shift;                     #これは自分への参照を取得している
 	return "$self->{X} :$self->{Y}\n";    #this.Xとかthis.Yってか?
 	                                      #でも""の中なんですけど...
 	                                      #追記:Perlってこういうもんなんだって。
 }
 
 1;

----
この記事は
#vote(おもしろかった[1],そうでもない[0])
#vote(おもしろかった[1],そうでもない[1])

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS