問題タブ [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.
function - 言語設計: Goto と関数の組み合わせ
私は現在、アセンブラーに類似した低レベルのインタープリター型プログラミング言語を設計し、再考しています。
私はすぐに、関数/ループ/goto の決定の問題に遭遇し、ループが好きwhile
でfor
高レベルすぎて不適当である一方で、goto は低レベルすぎて維持できず、一般的に再び悪になるだろうと考えました。戻り値と引数を持つほとんどの言語の関数は、言語の概念にも適合しません。
だから私は関数とgotoの間で可能な何かを理解しようとしました
- 再帰
- 効率的なループ
しばらく考えた後、サブルーチンのアイデアを思いつきました。
- 関数のように始まりと終わりがある
- 名前はありますが、goto のような引数はありません
- jump で 1 つに入り、終了する前に再びそこから出ることができます
return
(結果は返されず、サブルーチンを停止するだけです)。 - 通常のコードと同じように処理 -> goto のようなグローバル スコープ
だから私は知りたかった:
- 上記のアイデアは良いですか?(欠点)利点は何ですか?
- function と goto のより良い組み合わせ、またはまったく新しいアイデアはありますか?
vb.net - VB.NETのGoToステートメントと代替
GoTo
私は別のフォーラムにコードスニペットを投稿して助けを求めましたが、ステートメントを使用することはプログラミングの非常に悪い習慣であると人々は私に指摘しました。私は疑問に思っています:なぜそれは悪いのですか?
VB.NETで使用するための代替手段としてGoTo
、一般的にはより良い方法と見なされるものはありますか?
ユーザーが生年月日を入力する必要がある以下のスニペットについて考えてみます。月/日付/年が無効または非現実的である場合は、ループバックしてユーザーにもう一度質問したいと思います。(私は整数のサイズをチェックするためにifステートメントを使用しています...これを行うためのより良い方法があれば、それも教えていただければ幸いです:D)
c - c99 goto 過去の初期化
クラッシュのデバッグ中に、いくつかのコードでこの問題に遭遇しました。
この問題は、最初の malloc が失敗したときに発生します。の初期化にジャンプするためp2
、ランダム データが含まれ、 への呼び出しfree(p2)
がクラッシュする可能性があります。
これが、コンパイラーが goto が初期化を越えてジャンプすることを許可しない C++ と同じように扱われることを期待/希望します。
私の質問: 標準で許可されている初期化を飛び越えていますか、それとも gcc の c99 実装のバグですか?
legacy - ダークサイドへのGOTOを迫られる
レガシー (コア) システムで作業している開発者が、すでにスパゲッティ コードに感染している既存のコードに新しい機能を追加する際に、GOTO ステートメントを使用するよう圧力をかけられているという状況が職場で発生しています。
さて、より保守しやすいソリューションへのリファクタリングに時間を費やす代わりに、「たった 1 つの小さな GOTO」を使用することについての議論があるかもしれないことを理解しています。問題は、この孤立した「たった 1 つの小さな GOTO」がそれほど孤立していないことです。少なくとも 1 週間に 1 回程度、新しい 'one little GOTO' を追加します。このコードベースは、1984 年以前にさかのぼるコードが GOTO だらけで、多くのパスタファリアンがフライング スパゲッティ モンスター自体に触発されたと信じるようになるため、作業するのがすでに恐ろしいものです。
残念ながら、これが書かれている言語には既製のリファクタリング ツールがないため、「後で生産性を高めるためのリファクタリング」をプッシュするのが難しくなります。
新しい GOTO を追加して 2000 行をランダムなセクションにジャンプすることはできないということで誰もが同意しているこの問題を経験した人はいますか?
tldr;
開発者が継続的に GOTO ステートメントを追加するよう圧力 (強制) されているという問題に対処するにはどうすればよいでしょうか (追加とは、何行も離れたランダムなセクションにジャンプするために追加することを意味します)。
この件でラプターズに貴重な開発者を失うのではないかと心配し始めています...
説明:
後藤 here
alsoThere:
いいえ、これは、while ループの途中で、1 つのサブルーチンから別のサブルーチンに 1000 行ジャンプするような goto のことです。後藤 somewhereClose
there:
私は、プログラムが何をしていたのかを合理的に読み取って判断できる goto の種類についても話していませんでした。後藤 alsoThere
somewhereClose:
これはミートボールを作るようなコードですmidpoint:
初めてここに行く場合 nextpoint
detail:
(それぞれほぼ完全に異なります) Goto pointlessReturn
here:
この質問では、goto を時々使用しても問題ないことについて話しているのではありません。後藤there
tacoBell:
そして、それは製図板に戻ったところです。後藤 Jail
elsewhere:
アナリストがプログラムに触れるたびにその動作を解読するのに数週間かかる場合、コードベースに深刻な問題があります。実際、仕様goto gotoのhell:
最新の goto 4
レンディションではないにしても、私は実際に detail
pointlessReturn:
tacoBell
Jail:
実際には、小さな勝利を収めた小さなアップデートです。この特定のプログラムの一部を一度に 1 つのラベルずつリファクタリングするのに 4 時間を費やし、各反復を svn に保存しました。各ステップ(約20個)は小さく、論理的で簡単で、食事から自然に飛び出し bypass
nextpoint:
、奇妙な種類のスパゲッティミートボールの磁力を介して画面に飛び出しました. Goto elseWhere
bypass:
は、ロジックの変更を導入しないことを合理的に検証します。この読みやすい新しいバージョンを使用して、私はアナリストと話し合い、この変更のほとんどすべてを完了しました。後藤 end
4:
最初 *の場合は初めてここに移動hell
、なし 2 番目の場合は初めてここ hell
に移動、なし 3 番目の場合は初めてここ hell
に移動4 番目は現在最新の移動 hell
end:
c++ - EINTRの処理(gotoで?)
背景:これは、 C ++(Linux / GCC)でのシステムコールのEINTRの処理に関するこのスレッドのフォローアップ質問です。アプリケーションのプロファイルを作成するかどうかに関係なく、システムコールの設定errno
をEINTR
特別な場合として処理する必要があるようです。の使用については、多くの、多くの、多くのgoto
意見があります。
私の質問:システムコールは、名目上のものと見なされる場合に設定errno
されていますか?そうでない場合は、次のコードを処理するように変換することをどのように提案しますか?EINTR
goto
EINTR
前もって感謝します!
乾杯、-
クリス
更新:以下の回答に基づいて、私は次のマクロを作成することになりました。
これは、元のスニペットを次の例に変換するために使用されます。
これが他の誰かに役立つことを願っています!
c - goto の許容される用途は何ですか?
重複の可能性:
C または C++ での適切な goto の例
goto ステートメントのどのような使用法が受け入れられると思いますか? C 組み込み作業のコーディング ガイドラインについて話し合っていますが、goto が最もクリーンな方法である場合があるかどうか疑問に思っています。
logic - メソッドを継続的に呼び出す単純なプログラム ロジック
私は、プログラムが処理を実行してから、しばらく待機する必要がある状況にあります。たとえば、5 秒待ってから、同じ処理を再度実行します。
ロジックの実装方法がわかりません。
私はロジックを開発しました。コードは以下のとおりです。
このコードの動作: このメソッドを 1 回呼び出すだけで、処理が実行され、5 秒間待機してから再度処理されます。
これまでのところ、上記のコードは正常に動作していますが、「goto」ステートメントの使用はプログラミングでは適切とは見なされていないと聞いています。
私が知りたいのは、このコードの副作用があるか、同じことを行う他の効率的な方法があるかどうかです。
sql-server - SQL-gotoステートメント
SQLクエリで「goto」ステートメントを使用するのは良い習慣ですか?
java - break と continue ステートメントを含むラベルをサポートするプログラミング言語は?
最近、Java のラベル付きステートメントと、break および continue ステートメントでラベルを指定する機能について読みました。この種の構文をサポートする言語は他にありますか?
loops - Perl ループ ラベルは GOTO としてカウントされますか?
一般に、GOTO を避けることをお勧めします。それを念頭に置いて、私はこのトピックについて同僚と議論してきました.
次のコードを検討してください。
ループ ラベルの使用は goto としてカウントされますか?
これは perldoc の perlsynが言わなければならないことです:
C プログラマーが Perl で特定のアルゴリズムをコード化する方法を次に示します。
一方、このイディオムに慣れている Perl プログラマーが行う方法は次のとおりです。
あなたはループを短絡して前進するように明示的に言っているので、これについての私の見解はノーですが、私の同僚は同意しません。これが GOTO であるかどうかを説明する説得力のある議論またはドキュメントを探しています。また、なぜこれが perl で良い習慣と見なされるか、または考慮されないかについての説明も受け入れます。