様々なプログラミング言語において、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する方が良さげだと思います。