TOP >> マニアックなプログラミング
トリッキーコードネット トリッキーなコード

【トリッキーなコード】なるべく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する方が良さげだと思います。
トリッキーコードネット の TOPへ HOTNEWS の 総合TOPへ