実は便利?プロトタイプ
「試作機?」
ちゃうちゃう。
プロトタイプとは、サブルーチンの引数の型のことです。
C言語なんかでも使われていると思います。
そうそう、こんなの。
void func( char *string );
()の中がそうです。
「ん、Perlにそんなんあったっけ?」
意外と知られていないようですが、あります。
というか、基礎かとオモタ…
実は(じゃなくて基礎…)、サブルーチン名の横に括弧をつければ、指定できるんです。
sub number();
とはいっても、引数をデフォルトで変数に代入できるわけでもなければ、厳密な型も宣言できませんが。
引数の種類が、スカラー値か配列かくらいです。
$ # 対応する引数一つをとる意味
@ # 以降にリストを要求する意味
& # 対応する引数一つに、サブルーチンを要求する意味
\@ # 対応する引数一つに、配列変数を要求する意味
; # これ以降の引数は省略可能という意味
あらかた説明すればこんな感じです。
さて、何がどう便利かと言えば、たとえば、
リファレンスの項で説明したように、ファイルの中身を入れる変数を指定したい場合、
file_load("filename.txt", \@log);
こんな風に渡すわけですが、この円マークが要らなくなります。
sub file_load { ... }
を、
sub file_load( $ \@ ) { ... }
とするだけです。
file_load("filename.txt", @log);
で同じ意味になります。
なんか、組み込み関数みたいで格好いいですね。
「そやろか?」
さらに、擬似制御構文的なこともできます。
プロトタイプを、
sub try( & ) { ... }
とすれば、
try {
my($l, $r) = (1, 0);
$l / $r;
};
こんな風に、第一引数に&を入れれば、普通は無名サブルーチンであることを示すために、
try sub { ... };
と書かなければならないのを、subキーワードを省略できます。
これも格好いいですね。
「まぁ…」
組み込み関数のmap関数も、同じようなプロトタイプで、
無理やりコードにするならば、
sub map( & @ );
こんな感じになります。
是非、色々と試してくださいまし!
「最後はやっぱりそれか」
最終更新:2008年03月12日 23:10