視線の流れ

プログラミング言語には、プログラマの意図をコンピュータに伝えるという大事な仕事がある。そしてもちろん、プログラマ間でもコードを読み合うわけだから、読まれるという点では自然言語と同じ意味で「言語」でもある。

どうしても気に食わない事がある

『Real World Haskell』から引っ張ってきた、ごく普通のHaskellコード

let capCount = length . filter (isUpper . head) . words

これを読むときは、どう考えてもコードを右から左へ……それどころか、右へ左へ視線をさまよわせながら読むことになると思う*1。どうしてこんな記法にしたんだろう? 何か深遠な理由があるのか、他にどうしようもなかったのか。

どうしてこうなった

少し考えてみた。たぶんHaskell(とかMLとかの関数型言語)が意識しているのが数学の合成関数の記法。
 h(g(f(x))) = h \circ g \circ f (x)
右から左だ。とはいえ今更のように、この記法を発明した数学者*2に文句を言うわけにもいかない。xにf、g、hと順番に適用してるだけなんだから、こんな記法でも良いと思うんだけどなあ
 (x).f.g.h
……これがまさにオブジェクト指向ってことかな。オブジェクト指向は記法的にも読みやすいというメリットがあるのかもしれない。

視線の流れで何かを測定できないか

「視線移動が複雑なコードは、人間にとって複雑である」と仮定する。ソースコードの複雑さを、視線の流れの複雑さで測定できないかなあ。「視線移動の複雑さ」をどう表現するかが問題だが、ソースコードを、ソースコードだけを解析するよりは楽なはず。ソフトウェアメトリクスとかの分野で絶対にやってる人がいると思うんだけど。

*1:まあHaskellに慣れれば違うのかもしれないが

*2:誰だろう?ライプニッツさんとかになるの?