型推論と可読性

C# 3.0ではvarという暗黙に型付けされる型があるのだが
先日、これを乱用したコードをみた

var str = String.Empty;

for (var i = 0; i < 10; i++)
    ...


これは個人的には許容できないコードだ

組み込み型にvarを使うなんて理解できない


わざわざvarを使って可読性を落とすより、こう書けばいいだろうに

string str = String.Empty;

for (int i = 0; i < 10; i++)
    ...

varと書いたらどうしても一瞬「何の型だろ?」と考えてしまう
そして、その一瞬考えてしまう時間が可読性の低さを物語っている



C++0xでも型推論(auto)が導入されるが、私はautoを極力使わないコードを推奨する
使うとしたら関数ポインタ、ラムダ式、begin(), end()の戻り値の型くらいだろう
(今のところ他にいい使い道が思いついてないだけだろうけど)

void func() {}
vector<int> v;

// auto使ったコード
auto func_ptr = func;
auto is_even  = <>(value)(value % 2 == 0);
auto first    = v.begin();
auto last     = v.end();

// autoを使わないコード
void (*func_ptr)()          = func;
bool (*is_even)(int)        = <>(value)(value % 2 == 0);
vector<int>::iterator first = v.begin();
vector<int>::iterator last  = v.end();

型推論は、var/autoを使ったほうが可読性が向上する場合のみ使用する




C++ではたまに、「STL使うと可読性落ちるからオレは使わない」と胸を張って言ってる人がいるが
STLC++の標準ライブラリであり、begin()/end()やそれを引数にとるアルゴリズムは基本構文といってもいいものだ

STLを使わないC++なんて、ただのオブジェクト指向付きCだろう
読めない人は勉強不足なだけだ
(もしくは読めるコードを書けない)


難しい = 可読性が低い
では決してない