メソッドチェーンの話の続き

ぐだぐだ言う前に認定試験でも受けるつもりでMojoのコードを制限時間二時間くらいで通読してみれば自然と言いたいことがわかるようになるんじゃないかと思いつつ。

 前回のサンプルの

my $loader = Loader->new;
my $book = $loader->load( 'Book' )->build

このコード。

 どのように書いてほしいかというと、

my $loader = Loader->new;
$loader->load( 'Book' );
my $book = $loader->build

と書いてほしいです。

 こう書けば、loadが何をしているのかが、コードから推測できます。buildが$loaderから呼ばれたことがコードを読んでわかります。

文脈にもよるけれど、この場合大事なのは$bookというオブジェクトを得ることなんだから、ローダがどこでなにをしているかなんて(そこでエラーが起こってデバッグしている最中でもない限り)気にする必要はない。loadやbuildのなかでどんな関数を呼んでいるか、いちいち気にしないのと同じこと。

下の例の場合、$loaderがBookをロードしたときの返り値を捨てているから、読み込んだものをどうしたのかはわからないし、$loaderそのものをbuildしたら$bookができる、というのも唐突に見える。このまますんなり理解できないから、結局Loaderの中身を読んで、中にBookクラスが保存されているか調べないといけなくなる。それでは隠蔽する意味がない。

みんな忙しいんだから、なるべく時間をかけずに読みたいんですよ。