ホームページ バックエンド開発 PHPチュートリアル phpのgoto文のメリット・デメリットを詳しく解説

phpのgoto文のメリット・デメリットを詳しく解説

May 15, 2018 pm 03:54 PM
goto php 長所と短所 詳しい説明 声明

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

ステートメントの結果:

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles