初めてのclass
初めてperlでclassを作ってみた。
内容はあんまり無い、phpで誰しも真っ先に作るclass。
配列にkeyとvalをぽんぽん入れて、出せて、毎回array_key_existsしなくて良い。
そんなclassはどう書くのか試してみた。
1 #!/usr/local/bin/perl 2 3 package dataContainer; 4 use strict; 5 use warnings; 6 use Data::Dumper; 7 use Class::Struct; 8 9 struct( container => '%', ); # classのメンバ変数を宣言 10 11 sub init { 12 my ($self) =@_; 13 my %hash_ref; 14 $self->container(\%hash_ref); 15 } 16 17 sub set { 18 my ($self,$key,$val) =@_; 19 ${%{$self->container}}{$key} = $val; 20 return 1; 21 } 22 23 sub get { 24 my ($self,$key) = @_; 25 my %hash_ref = %{$self->container}; 26 return $hash_ref{$key} if exists $hash_ref{$key}; 27 } 28 29 package Main; 30 31 my $obj = new dataContainer; # constructor 32 my $obj2 = new dataContainer; # constructor 33 34 $obj->init(); 35 $obj2->init(); 36 37 print "================================\n"; 38 $obj->set('hoge', 'moge'); 39 $obj->set('hoge1', 'moge1'); 40 $obj2->set('agg', 'hagehaghe'); 41 $obj2->set('iya', 'sorehanai'); 42 43 # DEBUG 44 #my @hoge = ( %{$obj->container} ); 45 #my $dumper = new Data::Dumper(\@hoge); 46 #print $dumper->Dump(); 47 48 print $obj->get('hoge'). "\n"; 49 print $obj->get('hoge1'). "\n"; 50 print $obj2->get('iya'). "\n"; 51 print $obj2->get('naiyo'). "\n"; 52 53 1;
きもいようきもいよう。
コード貼り付けにVOXは向いてませんね。
やはりはてなでしょうか。
何でキモイと思うのでしょう。
- Class::Structを利用するとコンストラクタが使えない?ので毎回initが必要?マジで?コンストラクタ使いたいよ。
- メンバ変数containerはハッシュだってstructで宣言してるのにinitで必ずリファレンスと紐つけねばならない
- 運命の19行。self->containerをハッシュにキャストして、それをスカラーにキャストして扱う。(これしかないの?マジで?)
- 26行みたいな書き方はすげーいやだったのが段々快感に・・・
- 値のdumpが面倒。
- 引数のチェックは自前実装?(してないけど)
- typoしまくる。(俺のせいか、テストハーネス早いうちに学ばないと。)
- あああ、setでARRAYやHASHを入れる場合の考慮してないや、どう動くのかしら。