第137回 Perlは空気を読んでくれない Perlには空気を読ませると考える

Perlは空気を読む言語といわれています。

確かに楽な言語です。そして楽しい言語でもあります。
しかし、そう思えるようになったのは、Perlをある程度思ったとおりに動かせるようになってからです。

Perlは空気を読んでくれる?

Perlが空気を読んでくれるというならば、
あなたがテキトーに書いたソースでも、あなたが思った通りに動いてくれてもいいはずです。
「俺はこういうつもりで書いたのに、なんでPerlはそう思って動かないの!?」
こうなります。


また、空気を読むということでPerlからいきなり、
「今回の実行では、こうしといたよ。 前の実行とはなんとなく違う気がしたから、ちょっとだけ違う動きにしたけど。」
と言われてしまったら困ってしまいます。


プログラムですから、明確な理由がなく毎回違う動きになっては困るのです。


Perlが空気を読むってどういうこと?

ではPerlが空気を読むというのはどういうことなのでしょうか?
次のソースを見てください。

if( @c ){  }

これでPerlは配列の大きさが0でなければifの中を実行してくれます。
これは、このソースを何回実行しても同じ意味です。
Perlは常に配列の大きさが0でない場合にifの中を実行してくれます。


なぜこのような処理になるのでしょうか?
Perlでは、

if(ここ){}

「ここ」の部分はスカラーなブール値とみなします。



@cをスカラーなブール値とみなしたときどのように処理が進むかと言いますと、


@c → スカラーだと配列の大きさ → 数字をブールで評価すると0なら偽、そうでないなら真


こうなります。


これは、こうなると知っていないければ、こんなソースを書くことはできません。
つまり、プログラマは強い意志をもってここはスカラーな値でブールで判断して!と思って書いているのです。


Perlは空気を読んでくれない Perlには空気を読ませる

Perlは空気を読んでくれますが、簡単には読んでくれません。
こちらが、空気を読んでくれるように、ほのめかさないといけません。


先ほどの例だと、
「ifの中に配列を置いておいたよ。いつものやりかたでやっておいて」
とこうなります。

Perlに振る舞ってほしいように暗に示すのです。
この暗に示すやりかたを覚えてプログラムを書くとすばらしく奇麗なソースになるのです。
プログラマPerlの間に「阿吽の呼吸」がうまれます。
上級者は誰よりもうまくPerlと呼吸を合わせます。これがPerlが空気を読むということなのです。


Perlのソースはそうそう簡単に読めなくならない

Perlのソースは省略が多くてすぐに読めなくなると言われることがあります。
ですが、私はそんな風には思えません。Perlを書くにはかなりの知識を要求されます。
Perlが暗にどのように振る舞うのか知らなければいけません。
これを知らずにしてソースコードを省きまくることはできません。
もし省略したソースを書く人がいたらその人は知っています。
強い意志をもって、プログラムを書いています。そして、そうでなければいけません。
プログラム自体を覚えはじめの人にはまだ省略した書き方はできません。
まだ知識をつけることがたくさんあります。
プログラムを覚えたばかりの人は、アルゴリズム的にも冗長になったりして、短くなって読みにくいどころか、
余計な処理や、ときには重複した処理がはいったりします。私はそういった点のほうがソースが読みにくくなるのではないかと思います。