スポンサーサイト

一定期間更新がないため広告を表示しています

- | - | -
goto文は使うべからず?
音信不通気味な上に、 
どうにも専門的なブログになりつつあります。
書く気がどうにも起きなくて……。

と言うわけで、C言語等で
「使ってはいけない」と教わる人も居るgoto文です。
内容としては「○○○:」と書かれている行(ラベルって言うみたいですね。)に向かってジャンプすると言ったところでしょうか。

「間の処理命令を全て無視」するだけでなく、本来の「上から下へ一つずつ処理する」といったルールを無視する事も出来る命令文です。
つまり

○○○:

省略

goto ○○○

と記述すると、「省略」となっている処理を無限に繰り返す文が出来上がります。
そして最初に触れましたが、使ってはいけないと言われているのは「上から下へ一つずつ処理する」というのを無視できるのもありますし、何より…

goto △△△
○○○:
処理4
goto  EXIT

×××:
処理2
goto □□□

△△△:
処理1
goto ×××

□□□:
処理3
goto ○○○

EXIT:
終了

こんな書き方された日には自分は間違いなく暴れだします。
ただ、「間の処理命令を全て無視」という所はポイントだと思うのですよ。
例えば

x = 10;
flg = 0;
「xが1以上の場合括弧を繰り返す」 {
    「flgが0」 {
        処理1;
        「処理1は成功」 {
        
        } 「処理1は失敗」 {
            flg = 1;
        }
        x = x - 1;
    }
}

終了

あまり良い例ではないですが、この例だと
flgって言うのが0の間処理1はするけど、
処理1を一度でも失敗したらflgを1にする。
flgが1になったら処理はしない。
って感じですね。これを10回繰り返すのですが。

これ初回で処理1失敗したとすると、残り9回は何もしない処理が続きます。
何もしない処理が9回も続きます……。
こういう時に

x = 10;
「xが1以上の場合括弧を繰り返す」 {
    「flgが0」 {
        処理1;
        「処理1は成功」 {
        
        } 「処理1は失敗」 {
            goto EXIT;
        }
        x = x - 1;
    }
}

EXIT:
終了

と書くと、最初で失敗した場合残り9回の処理をせずに終了の手前まで飛んでくれちゃいます。
まぁ、上の例だと「break」でいいじゃん…。なんて思われてしまいますが。

ループの間に長々と処理があったり、その処理の失敗が致命的なエラーであり、処理を継続させてはいけない時等には、下手に分岐文で逃げ道を作るより終了処理直前までgotoで飛ばしちゃった方が文章が複雑化せずにスッキリと書けます。
終了処理にはいいんじゃないかなぁと思ったりしちゃったのでした。
開発・設計とかプログラミングとか。 | comments(0) | -
スポンサーサイト
- | - | -
Comments
Post a Comment










Recent Entries
Recent Comments
Search this site :