プログラムの識別子として複数の英単語をつなげるとき、単語区切りを大文字にしてつなげる CamelCase と、アンダースコアを使ってつなげる sanke_case の2つが良く使われています。この2つのどちらが読みやすいのか実験をした人がいる、というのが意外と知られていない気がしたので、ちょっと紹介しておきます。
To camelcase or under_score - IEEE Conference Publication (著者が配布している版はこちら)
この論文は被験者実験を行っています。 "extend alias table" のようなフレーズの後に、それを識別子に変換したもの(キャメルケースの場合 "extendAliasTable" )と単語のうち1つを偽物に入れ替えたもの(この例の場合 expandAliasTable, extendAlistTable, extendAliasTitle)を表示して、その中から正解を選ぶというタスクにおいて、被験者が目的のフレーズに当たる識別子を正確に、早く認識できるかを調査しています。
基本は統計的に有意な差が出るかどうかの判定をしていて、結果は以下の通りでした。
- 認識の正確さはキャメルケースのほうが高い(オッズ比 1.515)。
- キャメルケースのほうが認識に少し時間がかかる(13.5%、実時間にして0.42秒)。
- トレーニングが正確さに影響するかは分からない(帰無仮説が棄却できない)。
- トレーニングで認識にかかる時間は短くなる。
この論文では2つを比べるという都合上、キャメルケースのほうが良いという結論になっています。ただし、この実験設定はけっこう意地悪でもあって、似たような識別子がたくさん並ぶ状況ならば省略表記のほうが読みやすいという指摘もあります。関連研究のところにそういうこともしっかり書いてあるので、論文の著者らもキャメルケースを本気で押そうと思っているわけではなさそうです。
認識時間にほとんど差がなく、トレーニングで認識にかかる時間が短くなるということから、使い慣れたほうを使うほうが早いという常識的な話とも言えてしまいますが、この論文は「読みやすさ」というあいまいな指標を正確さと時間に分解して計測するという実験の作り方として参考になりますし、この研究から視線計測に基づく視認性の調査などにも続いていますから、ソフトウェア工学の中でもプログラム理解という分野を学ぶ上では良い材料であると思います。
[2019/4/17 追記] この記事を書いた後に気づいたのですが、プログラム理解に関する国際会議(ICPC 2019)の開催情報によると、この論文がちょうど10年前に発表された論文の中から最も影響の大きかった論文(Most Influential Paper)に選ばれたようです。