型推論議論

じっくり腰を据えて考えてから書こうと思ってたんだけど、時間もないし、考えもまとまらないし、それでも自分なりに答えが出ちゃったっぽいので、てきとーに書いてみます。

なぜかこの話って「型を書かないと読みづらい」「いやそんなことない」って議論ばかり見てる気がするんですよね。そんなことより「型を書いた方が書きやすい」ようなコードはどんなコードか?を議論したほうが建設的な気がするんですが。


例えば、何かコードを書いていて、変数を作りたくなった、とします。
このときプログラマの頭の中には、その変数が「どういう意味を持つのか」がぼんやりとイメージできているはずです。
このイメージをコードに固着させる方法として、型のない(あるいは型宣言のない)言語では変数名を使うわけですよね。Rubyとか。だけど実はもう一つ、変数の型も、このイメージを手っ取り早く固着させる助けになってるんじゃないか……と、私は思ってるみたいです。
より正確には、たぶん、「この変数の型は○○です」ではなくて「この変数は××な性質があると思います」くらいの情報なんだと思うけど。
型による厳密な制約(「この変数は△△でなければいけません!」)はコンパイルが勝手に掛けてくれるから、そこまでは書く必要は無い。
一方で右辺のコンテキストに任せっきりにしてもよいほど投げやりでもない。
その中間に

「まあだいたいコイツ(変数)はこんな感じなわけっスよ。で、コイツを使って…」

みたいな思考過程があって、それをそのまま書き下せる方が簡単な気がするんだけどなあ…。


autoももうちょっと強力に、「右辺値の型にテンポラリな名前をつける」くらいの能力があるともっと楽しいかもなあ…とか、妄想してみたり。

auto VerticalIterator vitr = vertical_begin(table);
auto HorizontalIterator hitr = horizontal_begin(table);

とか。もちろんこの型名を明示して別の変数が書けるとさらに楽しそう。