必須の引数とオプショナルな引数の順序に悩む修行
あるクラス Stuff のコンストラクタには文字列を渡す。
my $stuff = new Stuff($string);
で、オプショナルな引数は名前つきの引数で渡したい。そのとき、こういう風に書くのはどうだろうか。
my $stuff = new Stuff(code => q/353/, flag => 1, $string); # ... (1)
必須の引数は先頭で渡すべきだろうか。
my $stuff = new Stuff($string, code => q/353/, flag => 1); # ... (2)
UNIX 系のコマンドの影響か、オプショナルなものは先に書く (1) のほうが、自分としてはすんなり理解できる。(1) の場合、コンストラクタで引数を shift して pop して、という変則的なコードになる。
sub new { my $class = shift; my $string = pop; my %args = @_; my $instance = {}; ... bless $instance, $class; }
はたして (1) と (2)、どっちがいいんだろう。もっと別のやりかたがいいのかもしれないな。