Mad Libs式関数記法

プログラミング言語では、関数(メソッドもここでは含む)はたいがい、

関数名(引数1, 引数2, …)

というように、まず関数名を書き、その後に引数を順番に並べる形で呼び出される。括弧はあったりなかったりだが、関数名と引数の順番はまずどの言語にも共通する。

さて、プログラムコードはおおむね、読みやすいことが一つの理想である。

読みやすさを支える書き方の一つに、そのコードを自然言語の文章に近付ける、というものがある。もちろん、自然言語そのままに書くなんてことはできっこないので、あくまでも「ちょっとは自然言語っぽく見えなくもないように書く」程度のことではあるのだが、例えば条件判定式であれば、

if (length > 10)

と書けば、“if the length is greater than 10…(もし length が 10 より大きければ)” と読めるが、

if (10 < length)

では自然な文章になりにくい。

ところが、上で説明した関数呼び出しの記法だと、どういじっても自然な調子に整理しにくい場合がある。例えばあるオブジェクトを A 地点から B 地点へ動かせ、という指令を伝えようとしたら、文章なら

“move the object from place_A to place_B.”

と書きたくなる。ところがこれが伝統的な関数形式だと、

move(object, place_A, place_B)

となってしまい、ちょっと舌足らずな印象を受ける。つけ加えると、英文としては “move the object to place_B from place_A” の方が自然、という場合もあり、伝統的な記法だとこの順番で混乱しやすい。

さて、ここに “Mad Libs” という言葉遊びがある。

そこかしこに空欄が設けられた文章があって、そこにあてはめる言葉を、その文章を知らない人に適当に答えさせ、空欄を埋めた文章を読み上げて楽しむ、というものである。例えば貴方が言葉を答えさせられる人だとしたら、こんな形でリクエストがくる。

名詞・名詞・形容詞・擬声語・動詞

これに対し、貴方が適当に、例えば

リンゴ・鉛筆・黄色い・ピコピコ・踊る

と答えたとしよう。そして、元の文章が

吾輩は(名詞)である。(名詞)はまだ無い。どこで生まれたかとんと見当がつかぬ。何でも(形容詞)じめじめした所で(擬声語)(動詞)た事だけは記憶している。

であれば、最後に生成される文章は、多少語調を調整して

吾輩はリンゴである。鉛筆はまだ無い。どこで生まれたかとんと見当がつかぬ。何でも黄色いじめじめした所でピコピコ踊っていた事だけは記憶している。

となる。

この “Mad Libs” 式の書き方を、関数定義に応用したら面白いんじゃないだろうか。

例えば先程の例で言えば、move という関数は

move(object)from(place_A)to(place_B)

と書ける、というのはどうだろう。

ソートなら、こんな書き方になるだろうか。

sort(array)by(order)

メソッド呼び出しで遅延を挟みたければこう書ける。

object.wait(10)seconds_then_call(method)

関数名に単位が埋め込まれてしまっているのはご愛嬌。

まあ、こう書けたからどうだ、というほどのことはなく、単なるお遊びでしかないのではあるが。あと、自然言語っぽさによる可読性の演出、という意味において、 COBOL っぽくなったのも面白い。