ホームページ >バックエンド開発 >PHPチュートリアル >phpのgoto文のメリット・デメリットを詳しく解説
gotoとcallの違いが分からない子だと一目で分かります
その後、グループ内でコードを入力する際、子猫はDo...LoopLoopを使用しており、子供グループで「ループとは何ですか?」と尋ねました。 -_-|||その結果、あるグループは Do...Loop ループをほとんど使用せず、Goto を使用することを好むと言いました。これは、Goto が使用できないという意味ではありません。しかし、Goto はあまり使われていません。 ! !
くだらない話はこれくらいにして、本題に入りましょう
まず、Gotoと初心者向けコールの違いを説明します
Gotoはコードをジャンプするために使用されます。つまり、コードがGotoに実行されると、指定された場所にジャンプしますRem によって下向きに実行されます。完了しても Goto ステートメントの次のステートメントには戻りません。
Call はコードをジャンプするためにも使用されますが、より正確に言うと、Call はサブルーチンを呼び出すために使用されます。通話とは何ですか?つまり、Call が実行されると、指定されたサブルーチン (Sub) がコード内に配置され、サブルーチンが実行されると、 Call ステートメントの次の行に戻り、下方向に実行され続けます。
わかりにくい場合は、先ほどのクラスメートのコードを使用して説明しましょう:
これは Goto ステートメントです |
これは Call ステートメントです |
1. a=15 2. b=10 3. if a-b < 15 4. goto sub1//跳转至Rem sub1处,且不会再跳回来了!!! 5. if a-b > -15 6. goto sub2 7. end if 8. end if 9. 10. Rem sub2 11. MsgBox "a-b大于-15" 12. 13. Rem sub1 14. MsgBox "a-b小于15"//脚本到底部了,执行结束!!! |
りー |
OK、2 つの違いは明確に説明されました。ここで、Goto ステートメントの長所と短所について話しましょう。 ! !
上で述べたように、私は Goto の使用を減らし、絶対に乱用しないことを主張します。主な理由の 1 つは、Goto ステートメントが 1 つまたは 2 つ使用すると、プログラムの構造を破壊し、プログラムが読みにくくなる可能性があることです。大きな影響はありませんが、12 個の Goto を使用するとどうなるでしょうか?
次の段落は百度百科事典からの引用です (多すぎると思われる場合は、「goto ステートメントの結果」セクションだけを参照してください)
問題の起源:
1960 年代半ば以降、コンピュータのハードウェア技術はますます進歩しており、コンピューティングの記憶容量、計算速度、信頼性は大幅に向上し、ハードウェアの製造コストは継続的に削減されています。コンピュータの価格の低下により、コンピュータが広く使用されるための優れた条件が整いました。このような状況では、コンピュータ ソフトウェアもそれに適応することが急務となっています。したがって、大規模なソフトウェア システムを開発するためのいくつかの要件が提案されています。しかし、ソフトウェア技術の進歩が時代のニーズに応えられない状況が続いており、大規模ソフトウェアの開発プロセスでは、「複雑さの高さ」「開発サイクルの長期化」「精度の確保の難しさ」という3つの大きな問題が生じています。 。遭遇した問題に対する解決策がなく、問題が山積し、人間が制御するのが困難な状況が形成される、いわゆる「ソフトウェア危機」が発生します。この危機を乗り越えるためには、プログラミング方法、プログラムの正確性、ソフトウェアの信頼性などの問題について一連の研究を行う必要がある一方で、ソフトウェアの方法についても研究を行う必要があります。準備、テスト、保守、管理を行い、プログラミング方法論を生み出します。
goto文が有害であるという見解:
1968年、E.W.ダイクストラが初めて「GOTO文は有害である」という議論を提唱し、従来のプログラミング手法に疑問を呈し、プログラミング手法に関する議論に対する人々の一般的な重視を呼び起こしました。
Goto ステートメントの議論:
1960 年代後半から 1970 年代初頭にかけて、GOTO ステートメントの使用について激しい議論がありました。高級プログラミング言語から GOTO ステートメントを削除することを主張する人々は、GOTO ステートメントがプログラム構造に最も大きな影響を与える有害なステートメントであると信じています。その主な理由は、GOTO ステートメントが静的構造と動的構造を作成するためです。プログラムに一貫性がないため、プログラムの理解とトラブルシューティングが困難になります。 GOTO ステートメントを削除すると、プログラムの実行プロセスをプログラム構造から直接反映できます。このようにして、プログラムの構造が明確になり、理解しやすくなり、エラーチェックが容易になるだけでなく、プログラムの正しさを証明するのにも役立ちます。 これに反対する人は、GOTO ステートメントの方がより柔軟に使用でき、場合によってはプログラムの効率を向上させることができると信じています。 GOTO文を完全に削除するとプログラムが複雑になり、無駄な計算が増えてしまう場合があります。
goto ステートメントの解決策について:
1974 年、D.E. Knuth は GOTO ステートメント論争を包括的かつ公正にレビューしました: 彼の基本的なポイントは、
GOTO を制限なく使用する ステートメント、特に です。ジャンプバックを使用する GOTO ステートメントは、プログラム構造を理解しにくくするため、GOTO ステートメントの使用を避けるようにしてください。 しかし、他の場合には、プログラムの優れた構造を破壊することなくプログラムの効率を向上させるために、いくつかの GOTO ステートメントを制御された方法で使用する必要があります。彼の言葉を借りれば、「ある場合には、私はGOTOステートメントの削除を主張し、またある場合には、GOTOステートメントの導入を主張する。」それ以来、この10年にわたる論争は決着した。 その後、G. ジャコッピーニと C. ベームは、あらゆるプログラムが逐次構造、分岐構造、繰り返し構造によって表現できることを理論的に証明しました。この結論は、高級プログラミング言語から GOTO ステートメントを削除しても、高級プログラミング言語のプログラミング機能には影響せず、作成されたプログラムの構造がより明確になることを示しています。 [/hide]
ステートメントの結果:gotoステートメントはC/C++などの高度な
プログラミング言語で予約されていますが、使用しないことをお勧めします。それを使用するか、控えめに使用するか。 Java などの一部の 更新された
高水準プログラミング言語では、goto ステートメントをキーワードとして指定しますが、その使用はサポートされていないため、プログラムは簡潔で読みやすくなります。 goto ステートメントは引き続きサポートされています。goto ステートメントの利点の 1 つは、プログラムが確実に一意の終了を持ち、大きすぎる if のネストを回避できることです。如果有仔细看上面这段话的同学,相信能明白goto语句的利与弊了吧?
好吧,还是用代码来解释:
滥用goto语句的例子 |
合理利用goto语句 |
1. Rem A 2. If false 3. goto B 4. End If 5. 6. Rem C 7. if true 8. goto A 9. ElseIf false 10. goto B 11. else 12. goto C 13. End If 14. 15. Rem B 16. //这样的代码可读吗,你可以划出流程图吗。而且goto完全是可以用其他语句代替的。 |
1. Do 2. Do 3. Do 4. If true 5. Goto 停止//利用goto跳出深层嵌套 6. End If 7. Loop 8. Loop 9. Loop 10. 11. Rem 停止 |
讲解就到这里了,小猫的想法就是建议大家如果能不用goto就不用goto,尽量多使用Call,如果想跳出循环,每种循环都有对应的跳出语句,如exit do,exit for,exit sub,Exit Function
另外当大家需要用到循环时,建议使用Do...Loop和For...Next两者,而while循环比较绕口,完全可以用do和for代替他
以上がphpのgoto文のメリット・デメリットを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。