トリッキーコードネット トップへ戻る   C/C++, Java, Perl, PHP, JavaScript, アルゴリズム, ショートコーディング, IOCCCコードの解説, 等々

サイト情報

トリッキーなコード

7行プログラミング

物凄いコード集

アルゴリズム

データ構造

C/C++な話題

コードサンプル

ツール/環境構築

開発ノウハウ 等

ネタ/ジョーク集

おススメ書籍/サイト

サイトTOP >> トリッキーなコード >> なるべくgotoを使わない手法 (C言語)

できるだけgotoを使わない手法 (C言語)

様々なプログラミング言語において、gotoは使うな! とよく言われます。
その理由として、「gotoを多用すると、コードがスパゲティになりやすい」というものが挙げられます。

【 参考画像:ミートソーススパゲティ 】
スパゲティ
(※ 著作権上問題のある方はご連絡下さい。)

※スパゲティコード:
 コードの処理・実行順序がグチャグチャに絡み合っていて、見通しが非常に悪いコードの事です。
 (スパゲティみたいに、このコードを美味しく召し上がれ~~って事ではないですYOw)


gotoの悪い例としては、
・swtichの外から、switchの特定のcaseへジャンプしたり、
・3重ぐらいにネストしているforの一部分へ、forの外からジャンプしたり、

・・・そんなコードの改修依頼が来たら、ほんと涙が出てきちゃうかもしれません (/TДT)/アゥゥ


もちろん、使い方しだいで gotoがかなりの威力を発揮するケースもありますが、
プログラマーな人達の中には、gotoを嫌悪している人も多いです。( 凸( ̄д ̄) goto使ったらヌッコロス みたいに・・・)

余計なトラブルを防ぐ為にも、できるだけgotoを使わないに越したことはないです。



と、いうわけで、できるだけgotoを使わない、こんな手法はいかがでしょう??↓↓
do {
    if (...) {
        break;
    }

    if (...) {
        break;
    }
} while(0); 

Cコード例

#include <stdio.h>

int main(void)
{
    int i =  1;

    do {
        if (i == 1) {
            break;
        }
        /* ~何か処理~ */

        if (i == 2) {
            break;
        }
        /* ~何か処理~ */

        if (i == 3) {
            break;
        }
        /* ~何か処理~ */
    } while(0);

    return 0;
}
do while(0) {} で処理部分全体を囲ってしまい、 普通なら goto END; としたいところで、break; をするというやり方です。 break;をしたら、do while(0) {} を抜けるため、 動作的には、gotoを使って処理の一番最後に飛ばしているいる のと変わらないですね♪ インデントもできる為、多少はコードが読みやすくなる(?)かも知れません。 ただ、変数のスコープにちょっと注意が必要そうな予感はしますが・・・。 後、ネストが2重、3重になった場合なんかは、 別関数(C++であればinline関数)にして、returnする方が良さげだと思います。
         このエントリーをはてなブックマークに追加   


作業効率化・ライフハックのオススメ記事




コンピュータ・テクノロジーのオススメ記事





恋愛・人間関係のオススメ記事




※ 当サイトは、トップページからリンクで辿る事の出来るページに限り、リンクフリーです。
※ 当サイトの閲覧/利用によって生じた如何なる損害も、当サイト管理人は責任を負いません。
※ 当サイトの内容を転載される場合は、当サイトへのリンクをお願い致します。