プロトタイプ

実は便利?プロトタイプ


「試作機?」

ちゃうちゃう。

プロトタイプとは、サブルーチンの引数の型のことです。

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( & @ );

こんな感じになります。



是非、色々と試してくださいまし!



「最後はやっぱりそれか」

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2008年03月12日 23:10