ぽざうねっと

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  420  : 記事  0  : コメント  9436  : トラックバック  76

ニュース

さて、今年は何を漬けようか

書庫

日記カテゴリ

Accessory

Community

Private

よくある(ファイルなどから)複数行テキストを一行ずつ読み込む場合のソースコードですが
using (StreamReader sr = new StreamReader(filePath)) {
    string line = string.Empty;
    while((line != sr.ReadLine()) != null) {
        // do something...
    }
}
とするよりも
using (StreamReader sr = new StreamReader(filePath)) {
    for (string line = sr.ReadLine(); line != null; line = sr.ReadLine()) {
        // do something...
    }
}
の方が好きなんですが仲間はいるかなぁ?
行数の問題ではなく、一時変数 line の有効スコープが必要なループ内だけで収まってるのが好きなんです。
ソースコードとしては↓が一番読みやすいんでしょうけどね。
using (StreamReader sr = new StreamReader(filePath)) {
    string line = string.Empty;
    while(true) {
        line = sr.ReadLine();
        if(line != null) {
            // do something...
        } else {
            break;
        }
    }
}

昔、一つ目の書き方はいいけど二つ目はだめだといわれたことがありました。
はっきりいって読みやすさ、読みづらさは同レベルだと思うんだけど。
一つ目はWebなどで割りと一般的に紹介されているからでしょうね。
ああ、マイノリティ
投稿日時 : 2008年1月7日 11:04

コメント

# re: 少数派なのはわかってます 2008/01/07 11:26 774RR
関数呼び出しが2箇所になるから
バイナリサイズが増えるのでダメ
処理が readline で済まなくなった場合に修正箇所が2箇所になるのでダメ
ということだとおもう。俺の美学的には2番目でおkだけど

3番目は while (true) がコンパイラやアナライザで警告されそうでダメかな

# re: 少数派なのはわかってます 2008/01/07 13:40 シャノン
俺的には2か3.
1は代入と比較を一行でやってるのが嫌い。

# re: 少数派なのはわかってます 2008/01/07 14:05 かずき
2派です~。

# re: 少数派なのはわかってます 2008/01/07 16:59 melt
自分は基本的には3番目の書き方ですが、break 条件の方を先に書きます。

while(true) {
  line = sr.ReadLine();
  if(line == null) break;

  // do something...
}


# re: 少数派なのはわかってます 2008/01/07 20:13 Chuki
for で傾向を扱う比較をしたくない、という理由で2番嫌い^^;
while(true)はバカ避けのために極力避けるかな...

自分で書くときはmeltさんと同じように書くかなぁ。
#1番も嫌い^^;



# re: 少数派なのはわかってます 2008/01/08 9:54 THREE-ONE
>774RRさん
バイナリサイズはまだしも、ReadLine ですまなくなった場合は、扱うデータ型が変わるので、全とっかえになるから気にしなくてもいいかなーと思います。

>シャノンさん
それもありますね、このパターン以外で代入と比較をやってるサンプルをほとんど見ないからなおさらです。

>かずきさん
ナカーマ

>meltさん
たしかに、終了条件は先に書くほうがいいですね。
普段書かないパターンを書くと、そのあたりのことをすっかり忘れてしまう。

>Chukiさん
私も while (true) はまず使わないですね。
だって怖いですもん。

# [.NET]C# 3.0 と while(true) と Iterator 2008/01/09 6:08 NyaRuRuの日記
よくある(ファイルなどから)複数行テキストを一行ずつ読み込む場合のソースコードですが using (StreamReader sr = new StreamReader(filePath)) { string line = string.Empty; while((line != sr.ReadLine()) != null) { // do something... } } とするよりも using (St

# Lambda & Iterator 2008/01/11 13:52 GrayRecord
Nyaruru の日記で面白そうなことが書かれています。『C# 3.0 と wh...

# いまさら1月PV 2008/02/05 12:13 へぼろっぱぁ
いまさら1月PV

Post Feedback

タイトル
名前
Url:
コメント: