original page : http://ja.doukaku.org/167/
WEB+DB 43のRecent Perl Worldを読んで知りました。
変数を初期化するに当たってPerlでは
my $var ||= 'foo';
とかきます。この不備を補うためPerlの5.10には
Defined-or演算子が実装されたそうです。
$zero //= 25;
このような変数のデフォルト設定を行う方法を各種言語ではどうかくのでしょうか。
#5973
original page : http://ja.doukaku.org/comment/5973/
Perlではmy宣言された変数はそもそも未定義のはずですから、
"my $var ||= 'foo';"というコードの意図は私もうまく解釈できません。
||=や//=(Defined-or)を使いそうなシチュエーションとしては、
可変のパラメーターを使用して変数の初期化を行いたいような場合
(パラメーターがセットされていればその値で初期化し、セットされていなければ
デフォルトの値を使用する)
なのかな?とお題を解釈しました。
sub function{
my $var = shift;
$var ||= 'foo';
}
とか。
「不備」というのは、$varに"0"や空文字が入っていた場合でも
論理値が偽になってしまうので「未定義」と区別が出来ない・・・
ということでいいのですよね?
(BBSなどで、名前を「0」にすると「名前を入れてください」というエラーになるものが
結構あったような)
Rでは、missing()を使って引数に値がセットされているかどうかをチェックします。
Perlみたいに1演算子で・・・という便利なものはなさそうです。
f <- function(var){ if(missing(var)){ var <- 'foo' } var } > f() [1] "foo" > f("") [1] "" > f(0) [1] 0