2011年6月7日火曜日

引数の明示という観点から残念なコードのリファクタ


このエントリーをはてなブックマークに追加


残念なコード②を我流で書き直してみた。



sub new {
my $class = shift;
my %par = @_;

my $self;
$self->{ua} = LWP::UserAgent->new(
agent => $par{agent} || 'Mozilla/4.0'
) or return;
$self->{ua}->env_proxy if $par{env_proxy};
$self->{ua}->proxy('http', $par{proxy}) if $par{proxy};
$self->{ua}->timeout($par{timeout}) if $par{timeout};
$self->{host} = $par{host} || 'toolbarqueries.google.com';
bless($self, $class);
}



こんな感じになった。



sub new {
my ($class, $args) = @_;
my $env_proxy = $args->{env_proxy} ? delete $args->{env_proxy} : croak "env_procy is necessary";
my $proxy = $args->{proxy } ? delete $args->{proxy } : croak "procy is necessary";
my $timeout = $args->{timeout } ? delete $args->{timeout } : croak "timeout is necessary";
my $host = $args->{host } ? delete $args->{host } : 'toolbarqueries.google.com';

my $self;
return unless ( $self->{ua} = LWP::UserAgent->new( agent => $par{agent} || 'Mozilla/4.0' ) )
$self->{ua}->env_proxy;
$self->{ua}->proxy('http', $proxy);
$self->{ua}->timeout($timeout);
$self->{host} = $host;

bless $self => $class;
}



使えるならSmart::Args使いたいね。
あ、UserAgentはnewのときに、いっしょに入れてやったほうがいいのかな。



$self->{ua} = LWP::UserAgent->new( agent => $par{agent} || 'Mozilla/4.0',
env_proxy => 1,
timeout => $timeout,
);





0 件のコメント:

コメントを投稿