サブルーチンは、予想よりも多くの引数で呼び出されたときに鳴き声を上げるべきですか、それとも余分な引数を単に無視すべきですか?
#!/usr/bin/env perl
use warnings;
use strict;
sub routine {
my ( $a, $b ) = @_;
return $a * $b;
}
my $reslult = routine( 4, 5, 6 );
サブルーチンは、予想よりも多くの引数で呼び出されたときに鳴き声を上げるべきですか、それとも余分な引数を単に無視すべきですか?
#!/usr/bin/env perl
use warnings;
use strict;
sub routine {
my ( $a, $b ) = @_;
return $a * $b;
}
my $reslult = routine( 4, 5, 6 );
これは、プロジェクト内であっても、ある程度主観的です。場合によっては、特にサブルーチンが公開されたライブラリの一部である場合、過剰な引数は呼び出し側の実際の問題を示唆し、チェックする価値があります。一方、サブルーチンが内部消費用である場合、余分な引数を無視すると、より便利になる可能性があります。(たとえば、配列の最初の要素を操作する必要がありますが、その値をわざわざ分離せずに、配列全体を指定するだけです。)
ユースケースについて考え、それらの余分な引数が単なるジャンクであるか、実際の問題を示唆している可能性があるか、またパフォーマンスの問題が何であるかを考えると、それが価値があるかどうかを判断するのに役立ちます。別の考慮事項:サブルーチン内のコードは、余分な引数が表示される可能性のある間違いを自然にキャッチします。その場合、引数カウントのテストは冗長であり、後で検出された特定のエラーよりもおそらく役に立たない可能性があります。
通常、わざわざ引数チェックを手動で書くことはしませんが、正しい対応は croak することだと思います。そうすれば、関数を拡張して、既存の呼び出し元を壊すことなく、後でオプションの引数を取ることができます。
Perl が十分に新しい場合は、次のFunction::Parameters
ようにインストールして使用できます。
use warnings;
use strict;
use Function::Parameters qw(:strict);
fun routine($x, y) {
return $x * $y;
}
my $result = routine(4, 5, 6); # croaks automatically
(ちなみに、変数を呼び出さないでください$a
または$b
: これらの名前はチェックで使用され、チェックsort
から除外されstrict 'vars'
ます。)