タグ付けされた質問 「goto」

11
「goto」ステートメントはどのようなバグにつながりますか?歴史的に重要な例はありますか?
ループに入れ子になったループから抜け出すために保存することを理解しています。このgotoステートメントは回避され、バグが発生しやすいプログラミングスタイルとして悪用され、決して使用されることはありません。 代替テキスト: 「ニール・スティーブンソンは自分のラベルに「dengo」という名前を付けるのはかわいいと思っている」 オリジナルのコミックを参照:http : //xkcd.com/292/ 私はこれを早く学んだからです。どんな種類のバグがgoto実際につながるのかについての洞察や経験は本当にありません。ここで何を話しているのか: 不安定? 維持不能または読み取り不能なコード? セキュリティの脆弱性? 完全に何か他のもの? 「goto」ステートメントは実際にどのようなバグにつながりますか?歴史的に重要な例はありますか?

12
これはCのgotoの適切なユースケースですか?
私は「議論、議論、投票、または議論を求める」ことを望んでいないので、これを尋ねることを本当にbutしますが、私はCに不慣れであり、言語で使用される一般的なパターンについてより多くの洞察を得たいと思っています。 私は最近、gotoコマンドに対する嫌悪感を聞いたが、最近、それに対するまともなユースケースも見つけた。 このようなコード: error = function_that_could_fail_1(); if (!error) { error = function_that_could_fail_2(); if (!error) { error = function_that_could_fail_3(); ...to the n-th tab level! } else { // deal with error, clean up, and return error code } } else { // deal with error, clean up, and return error code …

12
「goto」ブードゥー教を避ける?
switchいくつかのケースを処理する構造があります。switch動作enumを組み合わせた値によって重複したコードの問題を提起しています: // All possible combinations of One - Eight. public enum ExampleEnum { One, Two, TwoOne, Three, ThreeOne, ThreeTwo, ThreeOneTwo, Four, FourOne, FourTwo, FourThree, FourOneTwo, FourOneThree, FourTwoThree, FourOneTwoThree // ETC. } 現在、switch構造は各値を個別に処理します。 // All possible combinations of One - Eight. switch (enumValue) { case One: DrawOne; break; case Two: DrawTwo; …

10
これらの明白で関連性のあるケースにgotoを使用すると、何がそんなに悪いのでしょうか?
私はいつもそれgotoが悪いものであり、どこかに地下室に閉じ込められて永久に見られることはないことを知っていましたが、今日使用するのに最適なコード例に遭遇しましたgoto。 IPがあり、IPのリスト内にあるかどうかを確認してからコードを続行する必要があります。そうでない場合は例外をスローします。 <?php $ip = '192.168.1.5'; $ips = [ '192.168.1.3', '192.168.1.4', '192.168.1.5', ]; foreach ($ips as $i) { if ($ip === $i) { goto allowed; } } throw new Exception('Not allowed'); allowed: ... 使用しない場合はgoto、次のような変数を使用する必要があります $allowed = false; foreach ($ips as $i) { if ($ip === $i) { $allowed = true; …
40 php  goto 


7
これはgotoステートメントを正当化しますか?
私はこの質問に少し前に出くわしました、そして私はそこから材料のいくつかを引き出しています:「break n」コンストラクトの名前はありますか? これは、二重にネストされたforループから抜け出すようにプログラムに指示する必要がある人々にとって、不必要に複雑な方法のようです。 for (i = 0; i < 10; i++) { bool broken = false; for (j = 10; j > 0; j--) { if (j == i) { broken = true; break; } } if (broken) break; } goto文は悪魔だと言うのが好きな教科書を知っています。私はそれらが好きではありませんが、これは規則の例外を正当化するのでしょうか? nネストされたforループに対処する答えを探しています。 注:「はい」、「いいえ」、またはその中間のいずれで回答しても、完全に近い考え方の回答は歓迎されません。特に答えが「いいえ」の場合は、正当で正当な理由を提供してください(とにかくStack Exchangeの規制からそれほど遠くない)。

7
ネストされたループ内から「続行」するためのベストプラクティスは?
これは簡略化されたサンプルです。基本的に、文字列リストから文字列をチェックします。チェックにパスすると、その文字列(filterStringOut(i);)が削除され、他のチェックを続行する必要がなくなります。したがってcontinue、次の文字列に。 void ParsingTools::filterStrings(QStringList &sl) { /* Filter string list */ QString s; for (int i=0; i<sl.length(); i++) { s = sl.at(i); // Improper length, remove if (s.length() != m_Length) { filterStringOut(i); continue; // Once removed, can move on to the next string } // Lacks a substring, remove for (int …

3
なぜGOTOはPHP 5に含まれていたのですか?[閉まっている]
ここで何が尋ねられているのかを知るのは難しい。この質問は、あいまいで、あいまいで、不完全で、過度に広い、または修辞的であり、現在の形では合理的に回答することができません。再開できるようにこの質問を明確にするヘルプについては、ヘルプセンターに アクセスしてください。 7年前休業。 GOTOコントロールキーワードがPHP 5.3.0で導入されたことを少し前に発見しました。 http://php.net/manual/en/control-structures.goto.php なぜそれが起こったのですか? この背後にある言語設計の目標は何ですか? PHP開発者コミュニティはそれを求めましたか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.