問題タブ [goto]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
221 参照

goto - 一連のプロンプトにgotoを使用しないようにするにはどうすればよいですか?

私は、ユーザーに一連の質問を求めるコンソールベースのアプリケーションを作成しています。例えば:

「開くレコードを入力してください:」

「Xをやりたいですか?」

「Yをしたいですか?」

「続行してもよろしいですか?」

ユーザーがプロンプトで何も入力しない場合は、1レベル上に移動します。これはgotoを使用すると簡単です。私が考えることができる他の唯一の方法は、はるかに醜く見え、2、3以上のプロンプトに対してかなり扱いにくいforループにネストされています。これを行う簡単な方法があるはずですが、私はそれを考えることができません。

0 投票する
9 に答える
2662 参照

c# - C#で「ループの初期化」を処理する他の方法

まず、gotoステートメントは、最新のプログラミング言語の高レベルの構造によってほとんど無関係になり、適切な代替が利用できる場合は使用しないことに同意します。

私は最近、スティーブマコネルのコードコンプリートのオリジナル版を読み直していて、一般的なコーディングの問題についての彼の提案を忘れていました。何年も前に最初に読んだことがありますが、レシピがどれほど役立つかはわかりませんでした。コーディングの問題は次のとおりです。ループを実行する場合、状態を初期化するためにループの一部を実行してから、他のロジックでループを実行し、同じ初期化ロジックで各ループを終了する必要があります。具体的な例は、String.Join(delimiter、array)メソッドの実装です。

みんなが最初に問題に取り組むのはこれだと思います。引数を戻り値に追加するためにappendメソッドが定義されていると仮定します。

注:これに対するわずかな最適化は、elseを削除して、ループの最後に配置することです。割り当ては通常、単一の命令であり、elseと同等であり、基本ブロックの数を1つ減らし、主要部分の基本ブロックサイズを増やします。その結果、各ループで条件を実行して、区切り文字を追加する必要があるかどうかを判断します。

私はまた、この一般的なループの問題に対処するための他の見解を見て使用しました。最初にループの外側で最初の要素コードを実行してから、2番目の要素から最後までループを実行できます。ロジックを変更して、常に要素と区切り文字を追加することもできます。ループが完了したら、最後に追加した区切り文字を削除するだけです。

後者の解決策は、コードを複製しないという理由だけで私が好む解決策になる傾向があります。初期化シーケンスのロジックが変更された場合でも、2か所で修正することを覚えておく必要はありません。ただし、何かを実行してから元に戻すには余分な「作業」が必要であり、少なくとも余分なCPUサイクルが発生し、String.Joinの例のように多くの場合、追加のメモリも必要になります。

私はこの構成を読むことに興奮しました

ここでの利点は、重複したコードがなく、追加の作業がないことです。最初のループの実行の途中でループを開始します。これが初期化です。do while構文を使用して他のループをシミュレートすることに制限されていますが、変換は簡単で、読み取るのは難しくありません。

では、質問です。幸いにも、これを作業中のコードに追加してみましたが、機能しませんでした。C、C ++、Basicでうまく機能しますが、C#では、親スコープではない別の字句スコープ内のラベルにジャンプすることはできません。とてもがっかりしました。だから私は疑問に思っていました、C#でこの非常に一般的なコーディングの問題(私は主に文字列の生成で見ます)に対処するための最良の方法は何ですか?

おそらく要件をより具体的にするために:

  • コードを複製しないでください
  • 不必要な仕事をしないでください
  • 他のコードより2倍または3倍以上遅くならないでください
  • 読みやすい

私が述べたレシピでおそらく苦しむかもしれないのは読みやすさだけだと思います。ただし、C#では機能しないので、次善の策は何ですか?

*編集* いくつかの議論のためにパフォーマンス基準を変更しました。ここでは通常、パフォーマンスが制限要因ではないため、より正確な目標は、不合理にならないようにすること、これまでで最速にならないようにすることです。

私が提案する代替の実装が嫌いな理由は、コードを複製して一方の部分を変更する余地を残しているため、または私が一般的に選択する実装では、操作を「元に戻す」必要があり、その操作を元に戻すには余分な思考と時間が必要になるためです。あなたがやったこと。特に文字列操作では、これにより通常、1つのエラーが発生したり、空の配列の説明に失敗したり、発生しなかった何かを元に戻そうとしたりすることができます。

0 投票する
6 に答える
39815 参照

c# - この例では、gotoステートメントはどのように機能しますか?

私はこのコードサンプルを研究しています:

10のようなシーク番号を入力すると、「Not Found」ステートメントが呼び出され、対応するメッセージがコンソールに出力される理由がわかりません。この場合、goto:Foundステートメントが実行されているため、goto:NotFoundステートメントは呼び出されませんが、それでも対応するメッセージがコンソールに出力されます。この場合、プログラムがこの「NotFound」ラベルにジャンプすることはないため、方法がわかりません。

これについて教えてください...

ありがとう

0 投票する
11 に答える
4674 参照

c# - C# goto use - ここで他に何を使用しますか?

goto の使用は、ほとんどの人が避けるように言っていることは知っていますが、単純なコードが必要な場合に便利な場合があることをさまざまな場所で読みました。現在、ユーザーが選択した場合に繰り返す必要がある非常に単純なプログラムがあります。

ここで goto を使用するのは本当に悪いことですか? ループなどを行わずにコードを繰り返す方法は他にありません。これは非常に簡単でクリーンな方法のようです。または、何か不足していますか?

0 投票する
1 に答える
5588 参照

tsql - 複数の GO を持つスクリプト内の SQL GOTO ステートメント

特定の条件が当てはまる場合、エラーなしで SQL スクリプトを終了する必要があります。raiseerrorエラーコード20+とwith logパラメーターを使用することで解決できる1つの解決策があることを読みました。ただし、その制限は、管理者としてのみ実行でき、データベースへの接続が中止されることです。

また、GOTO を使用してスクリプトの最後にジャンプしようとしましたが、スクリプトの途中に複数の GO があるため、機能しません。別の解決策はありますか?

IF <some condition> BEGIN
GOTO Finished;
END
GO

Finished:
SELECT 'Done'

ありがとう!

0 投票する
3 に答える
679 参照

delphi - Delphi: この場合、Goto は有害と見なされませんか?

これで、TObjectList インスタンスができました。その中のアイテムをループして、リストからいくつかのオブジェクトを削除したいとします。あなたはこれを行うことはできません:

...最初のオブジェクトのインデックスカウンターを削除すると、私はすべて間違ってループが機能しなくなるためです。

だからここに私の解決策があります:

これは、これまでに見つけた最良の解決策です。誰かがもっときちんとした解決策を持っているなら、私はそれを見たいです。

0 投票する
6 に答える
456 参照

c# - この状況で「goto」を使用しても問題ありませんか?

以下は疑似コードです。

1 つのメソッドに複数の try-catch ブロックがあり、例外がスローされるたびにメソッドを最初から再呼び出ししたくありません。この状況での使用はgoto許容されますか?

0 投票する
2 に答える
9838 参照

windows - goto コマンドを使用した Windows バッチ ファイルが機能しない

GOTO コマンドと関連ラベルに問題があります。

事実: フォルダーから大量のファイルを受け取った場合 (それらはログ エラーです)、それらを開いて、特定の文字列が含まれているかどうかを確認する必要があります。はいの場合、ファイル名からいくつかの文字 (「_」が最後に出現した後のすべての文字を含む) をファイル名から削除し、他の操作を行います。

文字を切り取るために、ここで説明されているように、ループ方式で GOTO コマンドを使用しています: http://www.robvanderwoude.com/battech_while_loops.php

スクリプトは次のとおりです。

ラベル loopEnd?! の後に空の行があるため、スクリプトは実行されていません。そのラベルの直後に命令を書いている場合、命令は実行されますが、最初の for ステートメントからの残りの反復は実行されません (ログ エラー フォルダーには複数のファイルが含まれます)。

誰かが助けを提供できますか?

0 投票する
3 に答える
678 参照

c++ - 実行に失敗したコードのgoto行

私はいつも、プログラミングでgotoステートメントを使用することはほとんどないように教えられてきました。ただし、最近のプログラミングプロジェクトの一環としてそうする必要があります。さまざまなgotoステートメントを含むif/elseステートメントがあり、gotoステートメントが実行に失敗しています。理由はわかりません。どんな助けでもいただければ幸いです。

ビットシフトなどの簡単な説明:コンピュータプロセッサを実装しているので、25ビットオペコードの最初の3ビットを調べる必要があります。したがって、(myInt >> 22)&7は、オペコードの3ビットを分離します。

ここで何が起こっているかについて何かアイデアはありますか?

0 投票する
13 に答える
3694 参照

c# - チェーンスイッチ/gotoを置き換えることができるデザインパターン?

アプリケーションリソースを現在のアプリケーションバージョンに更新するためのコードがあります。このコードは、アプリケーションの更新後に呼び出されます。

ここでは、指定されたケースブロックにジャンプして呼び出すカスケードメソッドがあります。私は疑問に思います-この場合、使用するのに良い習慣は(しばしばそのような悪い習慣と見なされます!)に行きますか?メソッドを1つずつ呼び出したくない-次のように:

そのような問題を説明するデザインパターンはありますか?