書き込み専用コード

Effective STL 47項「書き込み専用コードの作成は避けよう」は、なかなか味のある項だと思う。そこに書いてある内容は、まさに読み手側に立ったコード記述をしようという内容だ。とまあそれだけならどこにでもある話なのだが、ここで触れられているのはつまり、
STLに慣れて、標準アルゴリズム高階関数と関数アダプタを使いまくって普通のfor文記述よりも読みにくいコードを書きまくってたら、STLにあまり通じていない周囲のプログラマーからは苦情が殺到するだろうから気をつけようという、とてももっともな内容なのだ。しかも引用先の43項ではSTLportのcompose2と標準アルゴリズムを使った、極端な悪例が挙げられており、それはここ最近自分が書いてきたスタイルと一致するものだった。
うーん、たしかに、他人が書いたコード読んでてcompose2とかを多用されると読むのつらいかもなー。自分で書いて自分で読むだけのコードならよいのだが。
というわけで標準アルゴリズムや各種関数アダプタの極端な利用は避けるのが正しいようだが、周囲のプログラマSTLに慣れてくれればいいだけなのだがなーと思ってしまったりもする。47章の中で本の筆者スコット・メイヤーズさんも、「、、ということは認めざるを得ない」みたいな書き方されてるしね。言いながら本音はどこにあるんだか。
STLの関数アダプタまわりも勉強しようよ」で片付く問題ならいいのだが、これはそんなに単純な問題ではない。問題は、非標準のものも含めたSTLの関数アダプタまわりをよく知る者が見たとしても、同じ者が普通のfor文で書かれたシンプルなコードを理解するのと、どっちが楽だろうか?という質問に、必ずしも即答できないのである。
「読みやすさ」というあいまいな指標を議論するので難しい。普通のfor文よりも文字数でいえば多くなるのは確か。でも文字数の少なさと理解しやすさは必ずしも一致しない。
なのでループ処理の書き方の適切不適切はケースによるということだ。明らかにfor_eachを使ったほうがいい場合もあるし、明らかにそうではないケースもある。そしてその判断をする境目は、結構あいまいだから、そこの判断は難しいといったところだろうか。