Gotoって・・・?

解決


Arpa  2004-02-19 12:06:10  No: 111892

初めまして。
よくGoTo文は良くないって聞くんですが
例えばDo Loopで次のループに移りたいとき
Do

if a = "" then Goto skip

skip: Loop

上記の様な事でも、使うべきではないのでしょうか?
意見をお願いします。


岡田 之仁  2004-02-19 13:02:56  No: 111893

う〜ん・・・確かによく無いとは、よく聞きました。

Do
    ...
    if a = "" then
        Exit Do
    End If
    ....
Loop While xxx

として、まず、ループを強制的に抜けさせると言う
コードで代用しましたが・・・

ご参考までに。

以上。


punto  2004-02-19 13:14:35  No: 111894

確かにね、VB に continue みたいのがないよね。
私は、loop の中を外に出す(別の procedure にする)ことにしてる。
そうすれば途中で Exit Sub できるからね。でも、こんなんもあるよ。

    Do While bIterance = True
        Do
            ...
            ...
        Loop While 0
    Loop

として、なかの Loop で Exit Do をやる、


punto  2004-02-19 13:17:19  No: 111895

あ、なんかもしかして Master と同じこと言ってるのかな?


ねろ  2004-02-19 17:41:11  No: 111896

Gotoを使わない方がいいと、教科書には書いてありますが
例外として深いネストのLoopから抜け出す時は便利と書いて
有ったような。。。。
何の本だっけ、'K & R' ??
それで教科書どおりに時々使ってます。
要するに'ハサミ'と一緒ですか。


punto  2004-02-19 22:29:53  No: 111897

一気に抜け出したくなるような nest が1つの procesure に
できてしまったことを考えなおしたほうがいい場合も多いん
でないかな?総ては否定しませんよ.

何の自慢にもならんが,わしゃ COBOL の sort procedure と
assembly 以外で Goto を使ったことは,ただの一度も,ない.
そう教育されちまったもんでね.尤も,GOTO 使おうと使うまいと
ちょっと気をぬきゃどんな言語使ったって立派な Untructured 
Spaghetti Oriental が作れる.

あ!VB の On Error Goto って使いまくりだった….しまった!
それもきっとなくなるんだよね,きっと….


ねろ  2004-02-19 23:28:47  No: 111898

えーと
「gotoに関しては、プログラムの構造を不明確にする可能性があることから、
構造化プログラムの純粋性を重視する人々から、ひどく嫌われています。
ただし細心の注意を払って使うようにすれば、gotoにより、Cのコードを効率的な、
読みやすいものとすることも可能です。」
Lee Hancock、Morris Krieger 共著  「The C Primer」より
まあCについての記述ですがVBでも同じでしょう。
細心の注意が払えなければ使わない方がいいと言うことかな。
とりあえず、いい子は使わないようにしましょう。
最も私のコードはgotoを使う使わないに関係なく
かなりスパゲッティーですが。(^^;

うーんと
>Untructured Spaghetti Oriental
What does 'Untructured' mean?
Unstructured???


特攻隊長まるるう  2004-02-20 02:09:35  No: 111899

VB6.0のヘルプより
『メモ   GoTo ステートメントを多用するとプログラムは読みにくくなり、デバッグが困難になります。できる限り構造化された制御ステートメント (Do...Loop、For...Next、If...Then...Else、または Select Case) を使ってください。』

Goto ステートメントは、プロシージャ内の指定した行に無条件に分岐する
フロー制御ステートメント…と書かれてます。ネストから抜けるくらいなら
いいんだけど、ちょっと前に戻ってみたり、よく分からない条件で分岐を
飛ばしてみたり…ごちゃごちゃ作ろうと思えばいくらでもw
Exit Sub および Exit Function なら似たような使用ができると思い
調べてみると、こちらは
制御構造の中でプロシージャを終了できます。…だそうです。
Sub プロシージャ作って Exit Sub すれば深いネストからも抜けれますし
使わない方向で努力した方が腕は上がるんじゃないでしょうか?。

ま、場合によっては引数が増えたり…Goto で書けば1行で済むのに使わないと
数十行書かないといけなかったり…(いや、プログラムの構造が悪いのは
分かってるんですが、既存のプログラムの修正とかだと下手に構造を変えれ
なかったり…しません?(汗))そんな時は迷わず使ってますけどねw。

自分で一から組んだプログラムで Goto を使わないと絶対に処理できない!
とかいうのは少ないと思いますので、使わないで努力するのをお勧めします。


特攻隊長まるるう  2004-02-20 02:12:57  No: 111900

あ、Exit Sub については punto さんが書いてたね。
重複しましたゴメンナサイ。


punto  2004-02-20 04:09:06  No: 111901

To Mr ねろ
Thank you for pointing out the mistyping of my article.
For "procesure" read "procedure".
For "Untructured" read "Unstructured".
These are quite similar to my program codes...(T_T)


ねろ  2004-02-20 05:45:10  No: 111902

puntoさん
つまらない突っ込みをしました。深謝!  m(__)m

特攻隊長まるるうさん了解です、ただ
> GoTo ステートメントを多用するとプログラムは.....
GoToステートメントを多様するプログラムをVBで作るのも
かなり難しいかと。(^^;


Arpa  2004-02-20 09:55:49  No: 111903

皆さん貴重な意見ありがとうございます。
賛否両論あるようですが、どうも好ましくないようですねTT;

Do Loop内の処理を別記し、実行したいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加