forループの話

過去日記にコメントがついても、今はサイドバーに「最近のコメント」も表示していないので自分しか気付けない(自分にはメールが来るので解る)。それだけならまだいいのだけどそれに自分が返信したとしても、今度はその相手も解らないのはどうよ、ってな感じで過去日記へのコメントの返信を新規に日記に書いてみる。別に、ネタが無いから、というわけでは……。

kuri1976 『いまこのやり方つかってみたのだけど、初期設定式に3つ式を入れて、さらに3項演算なんかもすると、ごちゃごちゃしすぎてなにがなんだか・・・。』(2005/09/12 15:08)

ちなみにコメントは id:wata_d:20050829:1125262557 へのもの。

確かに for 文の初期化式の中に色々突っ込んでしまうと、可読性がよろしくないですね。自分自身、たまにしかやっていません。 GetCount みたいなループの終点になる値を持ってくる関数(メソッド)がそれなりに重い時くらいでしょうか。

三項演算子などを含む場合は普通に外に出してもいいように思います。問題は、 for 文を抜けても変数のスコープが持ってしまうというだけなので(多分、見落としがなければ...)、for 文が終わってすぐ関数が終わったりするようなものであれば別段問題も無いでしょうし。そうでなくても、たかが 4バイトケチっても今日び何も変わらないでしょうしね……。可読性があまりに悪いと保守性なども低下してしまうので、無理してやる必要はないんじゃないかと。

そうと解りつつもどうしても気にしてしまう自分のような人は以下のようにしてみるのもいいかもしれません。

{
    int count = hoge->Count();
    for(int i = 0; i < count; ++i)
    {
        /* ... */
    }
}

ブロック作るなら関数にしろ、なんて事も言いますけどね……。これはこれで、インデントが深くなってしまって、美しくないですが。