2004-09-12
@ [mysoft] おこづかい帳 1.0.0 リリース
しました。初めてのVBAなので相当へなちょこです。動作速度も遅いし。
CVSは作ろうかと思ったんですが、近い将来ファイル構成とか代わりそうなのでここら辺が落ち着いてからにします。Excelのファイルなのでバグ修正などによるバージョンアップ時のデータ移行が今後の課題。
@ Wikiのトップページ
も更新して頂きました。またまたどうもです。 > たけぞうさん
@ [debian] manやinfoなどをWebで見れるように
してみました。これでドキュメントも読む気が出てきますねぇ
2006-09-12
@ [perl] 引数のハッシュ渡しとハッシュリファレンス渡し
よく「引数の数が多い場合はハッシュの名前つき引数で渡すべき」という話の延長で、1.ハッシュそのもので引数を渡すか、2.リファレンスを渡すかで意見が分かれたりします。
# 1. ハッシュ渡しの場合
method1(arg1 => 'test', arg2 => 'test');
# 2. リファレンス渡しの場合
method1({ arg1 => 'test', arg2 => 'test' });
2.だと{}つけるの忘れて「あーなぜか引数がうまく渡らねぇー」みたいによくはまるので、個人的には1.のスタイルが好きなのですが、2.を支持する人たちは「1.だと毎回ハッシュのコピーが起きて遅い」と言います。ではそんなに遅いのだろうかとちょっと気になったのでためしに以下のようなベンチマーク(引数7個、メソッド呼び出し3000回)を取ってみたところ、「メソッドに渡された引数を実際に参照する」というところまで考えれば、そう大差ない結果となりました。
#!/usr/bin/perl
use strict;
use CGI;
use Benchmark qw(:all);
sub hash_args {
my %args = @_;
# とりあえず引数を連結してみる
my $str = '';
for (sort keys %args) {
$str .= "$_ = $args{$_} ";
}
return $str;
}
sub hashref_args {
my ($args) = @_;
my $str = '';
for (sort keys %$args) {
$str .= "$_ = $args->{$_} ";
}
return $str;
}
$ARGV[0] ||= 3000;
my $cgi = CGI->new;
timethese($ARGV[0], {
HASH => sub {
hash_args(
aaa => '文字列のテスト',
bbb => 2,
ccc => $cgi,
ddd => [ 1 .. 10 ],
eee => 1,
fff => 'あいう',
ggg => 'かきく',
);
},
HASHREF => sub {
hashref_args({
aaa => '文字列のテスト',
bbb => 2,
ccc => $cgi,
ddd => [ 1 .. 10 ],
eee => 1,
fff => 'あいう',
ggg => 'かきく',
});
},
});
$ perl ~/tmp/args.pl 3000
Benchmark: timing 3000 iterations of HASH, HASHREF...
HASH: 1 wallclock secs ( 0.22 usr + 0.00 sys = 0.22 CPU) @ 13636.36/s (n=3000)
(warning: too few iterations for a reliable count)
HASHREF: 0 wallclock secs ( 0.23 usr + 0.00 sys = 0.23 CPU) @ 13043.48/s (n=3000)
(warning: too few iterations for a reliable count)
勝手な予想ですが、リファレンスで渡しても結局 $args->{hogehoge} みたいな感じでポインタをたどることになるので、全体的に考えればそんなに変わらないのではないかと。とにかくこれでハッシュ引数渡しを引け目なく推奨できそうです。
# 小人 [用途マスタを=OFFSET(マスタ!$A$2,0,0,COUNTA(マスタ!$A:$A)-1,1) にしてみてはどう..]
# おいぬめ [なるほどー。次バージョンで反映させますね。ありがとうございます。]