デジタルちんぶろぐ

デジタルな話題

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

ニュース


技術以外は
ちんぶろぐ

記事カテゴリ

書庫

日記カテゴリ

「多重ループは良くない」とか「コーディングルール上n重ループまで」という事を目にすることがあると思うんですが、それ全てが間違っているとは思いません。

ただ、メソッドアウトするとかなんとかを考えるより、

「素直に多重ループする方がわかりやすいよね。」

と自分が思ったのに上記制約があるとき、こんな関数を

void func1(void)
{
    int i,j,k;
    for(i = 0; i < 2; i++) {
        for(j = 0; j < 3; j++) {
            for(k = 0; k < 4; k++) {
                printf("%d,%d,%d\n",i,j,k);
            }
        }
    }

}

こんな風に書こうとする

void func2(void)
{
    int n,i,j,k;

    for(n = 0; n < 2*3*4; n++) {
        k = n % 4;
        j = n / 4 % 3;
        i = n / (3 * 4);
        printf("%d,%d,%d\n", i, j, k);
    }
}

自分に性格の歪みを感じてしまいます。

# 3重ループ程度が禁止ってところはまず無いと思いますが、例と言うことで。

投稿日時 : 2008年4月1日 21:37

コメント

# re: [C] 多重ループが良くないなら 2008/04/01 22:07 ひろえむ
たぶん、多重ループが発生する場面の多くは多重ループさせることが目的じゃないと思うんですよね。

何かしら意味のあるループのはずだからその単位で分割できる場面が多くあるように思うんですよね。

何にもまして多重ループを禁止するつもりはないですが、シンプルでわかりやすい構造に対する弊害となる場合が非常に多いのであまり深いインデントを必要とする多重ループは好きになれないんですよね(^^;

# re: [C] 多重ループが良くないなら 2008/04/02 12:55 myugaru
そういうことじゃなくって内部を関数に切り出すべきって意味だと思いますがどうでしょう?


# re: [C] 多重ループが良くないなら 2008/04/02 12:56 myugaru
あ、「そういうこと」ってのはスーパーあんどちんさんの最後の例を指しています。

# re: [C] 多重ループが良くないなら 2008/04/02 12:57 myugaru
なのでメソッドアウトがダメな理由がわかりません。


# re: [C] 多重ループが良くないなら 2008/04/02 13:08 シャノン
メソッドアウトがダメじゃないですけど、ネストがいくつを超えたら必ずメソッドアウトしなきゃダメっていう程に縛るのもどうかと思うのですよね。
「ネストがいくつを超えたら、見にくくなっている恐れがあります。メソッドアウトを検討してください」くらいでいいと思うんです。
そこでちゃんと検討しないような人は、メソッドアウトしても読みやすくならない可能性が高いんじゃないですかね。

# re: [C] 多重ループが良くないなら 2008/04/02 16:52 スーパーあんどちん
>> ひろえむさん
ご意見はその通りで、ですから例のような単純な処理の場合、どれだけ深かろうとそこに書いてあることが理解できないことも無いだろうと。
読みやすさや簡潔さ(この辺の判断は人によるけど)がどちらの方がいいか?で、ループ書いた方がわかりやすいのに規約に従うためにループを関数化して見なければいけない部分を分散化するのが嫌だってことです。

>> myugaruさん
単純にメソッドアウトがダメとは思ってないんですよ。
例に出した2つどちらの方が読みやすいか?僕は前者なんですよね。
メソッドアウトの例を出していなかったのは僕の記述不足ですが、多重ループの一部を関数化するということは、関数にループ範囲なりを引数で渡してその関数でループするって事になると思うんですよ。
それって単純な多重ループと比べて読みやすいか?が疑問に思えます。

>> シャノンさん
メソッドアウトに関して僕が言いたいこと以上の事を言ってくれてますね。ありがとうございます。



# Illikebuisse ptobw 2021/07/05 4:49 pharmaceptica.com
tadalafil uses https://pharmaceptica.com/

# re: [C] ???????????? 2021/08/08 21:36 hydroxyclorine
chloroguine https://chloroquineorigin.com/# hcqs 200

# osodjkrmwimf 2022/06/01 2:28 zqgvrecc
https://erythromycin1m.com/# erythromycin drug class

Post Feedback

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