問題タブ [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.
c - gotoを使用するかどうか?
この質問は決まり文句に聞こえるかもしれませんが、私はここにいる状況にあります。
Cで特定の文字列を解析するために有限状態オートマトンを実装しようとしています。コードを書き始めたとき、ラベルを使用してさまざまな状態をマークし、gotoを使用して1つの状態から場合によっては別の。
この場合、標準のブレーク変数とフラグ変数を使用するのは非常に面倒で、状態を追跡するのは困難です。
どのアプローチが優れていますか?インターンシップをしているので、何よりも上司に悪い印象を与えるのではないかと心配しています。
c++ - ブロックから抜け出す:デストラクタは呼び出されますか?
次のコードを検討してください。
バーのデストラクタは呼び出されますか?
c# - GoTo の使用は許容されますか?
私は現在、.Net Framework 2.0 の C# で古い VB6 プログラムを書き直しています (私の選択ではなく、会社によって決定されました)。ほとんどの場合、物事はかなりうまくいっています。このプログラムは、精密研削盤から受信したデータを測定し、グラフとダイヤルを表示して精度を表示します。
元のプログラマーは機械エンジニアでしたが、ソフトウェア エンジニアではありませんでした。プログラムは動作しますが、あちこちにずさんなコードがあります。最も注目すべきは、いくつかの GoTo ステートメントに出くわしたことです。必要に応じてループに入れ、そこから同じ機能を取得するのは非常に簡単です。
ただし、元のコードで、GoTo がループをシミュレートする以上のことを行っているように見えるケースに遭遇しました。いくつかの異なる終了条件があります。これは次のようになります (実際のコードではなく、デモ用に作成した短いコードです):
VB6 コード
実際のコードにはそれよりも条件が少ないかもしれませんが、基本的な考え方は、それ自体にループバックする原因となるいくつかの異なるものがあるということです。そのような状況でループを記述する良い方法はありますか、それとも goto ステートメントが受け入れられるケースですか? (確かに、非 goto ソリューションが望ましいでしょう)。
お時間をいただきありがとうございます。
注: ブレーク付きの while(true) ループを使用してみました。ステートメントを実行しましたが、プログラムが無限ループに陥り、ロックアップしました。複数の条件 (and/or など) を含む長い while ループを作成することをお勧めしますか?
c# - これは後藤表現ですか?
次のコードは、メッセージのバッチ処理ルーチンの概念実証です。ペストのように避けgoto
て、このコードを書き直しますか? それとも、これを実現するための表現力豊かな方法だと思いますgoto
か?
書き直す場合は、コードを投稿してください...
c++ - 「break」を使用して「for」ループを壊すと有害と見なされますか?
数日前、私は簡単なオープン ソース プロジェクトを開始しました。何人かの仲間が svn のコードを見たとき、そのうちの 1 人がbreak
、ループ内でステートメントを使用することfor
は有害であると見なされ、実行すべきではないと言いました。
break
しかし彼は、Linux カーネル ソース コードのループ内にステートメントのいくつかのケースを見つけるだろうと付け加えましたが、for
それはライナス トーバルズとチャック ノリスだけがそれを使用することを許可され、他の誰も使用を許可されていなかったからです。
どう思いますか?ループbreak
内で使用しても問題はありません。for
私の意見では、break
ブール変数などを使用する動作をエミュレートすると、多くの不要なオーバーヘッドが追加され、コードが単純ではなくなります。
また、プログラムの流れをあるポイントから別のポイントに任意に変更することはできないgoto
ため、と比較する余地はありません。break
goto
php - GOTOとTHROWの違いは?
最近、多くの人が「後藤」という一言だけを言ったと非難しました。
なぜそんなに厄介な言葉だと思われるのだろうか。
このトピックに関する以前のいくつかの議論を知っていますが、それは私を納得させません-答えのいくつかは、説明しようとさえせずに「悪い」と言っているだけで、PHPやIMOのようなスクリプト言語には関係のない理由をもたらします。
とにかく、私は非常に特別な質問をするつもりです:比較してステートメントをし
ましょう。
私の意見では、どちらも同じことをします。ある条件に基づいてコードの一部の実行を回避することです。
もしそうなら-後藤と同じ欠点がありますか?(もしあれば)?
そうでない場合-それは違いです。 goto
throw
throw
次の2つのコードスニペットのコード構造の基本的な概念の違いを理解できる人は、十分な経験がありますか?
これらのコードスニペットに関しては、「理論上」、「一般的」、「ここに素晴らしいXKCDコミックがあります!」ではありません。
なぜ最初のものは素晴らしいと見なされ、後者は最も致命的な罪であると見なされたのですか?
スパゲッティを作る際にスローがより強力で柔軟であるという事実を私は知っていることに注意してください。それは私にとって主要な違いにはなりません。それは概念ではなく、使用の問題です。
編集
私は多くの人から、最初の例はもっと新しく使うべきだと言われました。
理由:例外は、ビジネスロジックを実装するためではなく、エラーを処理するためにのみ使用する必要があります。
それは賢明に見えます。
したがって、無駄なコードの実行を停止するために残された唯一の方法は、gotoです(while、returnなど、同じ問題ですが実装が難しいいくつかの代替は言うまでもありません)?
c++ - C++ 、この goto ステートメントは保証されていますか?
これはより適切な質問だと思ったので、タイトルを少し変更しました。
リファクタリングしますか (goto の正当な使用のようです) ? 次のコードをどのようにリファクタリングして go to ステートメントを削除しますか?
完全なステートメント
ありがとうございました
ほとんどの好みを見た後、フラグで行くことにしましたが、ヨーク氏のコメントで。
みんなありがとう
perl - Perlの上位スコープで変数をローカライズする方法は?
AUTOLOAD
またはその他のサブルーチン ディスパッチ手法を使用する Perl モジュールを開発しているときに、次のパターンに何度か遭遇しました。
これは正常に機能caller
し、正しいスコープが表示されます。
今私がしたいのは、の実行中にローカルで$_
等しいに設定することです。これは次のようになります。$self
&$code
ラッピングを含むソリューションは、caller
パフォーマンスと依存関係の問題により受け入れられません。したがって、それは2番目のオプションを除外しているようです.
最初に戻ると、 の新しい値が$_
の範囲外に出ないようにする唯一の方法goto
は、変更をローカライズしない (実行可能なオプションではない) か、または のようなものを実装することuplevel_local
ですgoto_with_local
。
PadWalker
、Sub::Uplevel
、Scope::Upper
、およびその他を含むあらゆる種類の順列を試してみましたが、適切なタイミングでクリーンアップし、ラップしないB::Hooks::EndOfScope
堅牢なソリューションを思い付くことができませんでした。$_
caller
この場合に機能するパターンを見つけた人はいますか?
(SO の質問:別のスタック フレームで Perl 変数をローカライズするにはどうすればよいですか?は関連していますが、保持することcaller
は要件ではなく、最終的には別のアプローチを使用するという答えがあったため、この場合、その解決策は役に立ちません)
language-agnostic - なぜ goto を使うのが悪いのですか?
重複の可能性:
GOTO はまだ有害と見なされていますか?
goto ステートメントが含まれている C# コードに出くわしました (C# がサポートされていることさえ知りませんでした)。大学の授業の 1 つで goto ステートメントについて聞いたことをぼんやりと覚えているだけです。教授が絶対に使ってはいけないと言ったのを覚えているようですが、その理由は覚えていません。
このコードを書き直すことを検討する必要がありますか、それとも問題が発生する可能性は低いですか?
c++ - gotoを使用することの何が問題になっていますか?
私はxkcdをめちゃくちゃにしていて、これを見ました(数年前にそれらについての否定的なテキストも読んだ場合):
実際には何が問題になっていますか?では、なぜC ++でもgotoが可能なのですか?
なぜ私はそれらを使用すべきではないのですか?