Mad Libs式関数記法
プログラミング言語では、関数(メソッドもここでは含む)はたいがい、
関数名(引数1, 引数2, …)
というように、まず関数名を書き、その後に引数を順番に並べる形で呼び出される。括弧はあったりなかったりだが、関数名と引数の順番はまずどの言語にも共通する。
さて、プログラムコードはおおむね、読みやすいことが一つの理想である。
読みやすさを支える書き方の一つに、そのコードを自然言語の文章に近付ける、というものがある。もちろん、自然言語そのままに書くなんてことはできっこないので、あくまでも「ちょっとは自然言語っぽく見えなくもないように書く」程度のことではあるのだが、例えば条件判定式であれば、
if (length > 10)
と書けば、“if the length is greater than 10…(もし length が 10 より大きければ)” と読めるが、
if (10 < length)
では自然な文章になりにくい。
ところが、上で説明した関数呼び出しの記法だと、どういじっても自然な調子に整理しにくい場合がある。例えばあるオブジェクトを A 地点から 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 っぽくなったのも面白い。