Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Vor- und Nachteile der PHP-Goto-Anweisung

Detaillierte Erläuterung der Vor- und Nachteile der PHP-Goto-Anweisung

黄舟
黄舟Original
2018-05-15 15:54:139112Durchsuche

Sie können auf den ersten Blick erkennen, dass es ein Kind ist, das den Unterschied zwischen Gehe zu und Anruf nicht erkennen kann

Wenn Sie dann in der Gruppe Code eingeben, das Kätzchen benutzte Do...LoopLoop, aber ein Kind in der Gruppe fragte Do... Was ist Loop? -_-|||Als Ergebnis sagte eine Gruppe von Leuten, dass sie selten Do...Loop-Schleifen verwenden und die meisten von ihnen gerne Goto verwenden. Ich habe dieses Problem nicht entdeckt, dass man Goto nicht verwenden kann, sondern dass es so ist Verwenden Sie Goto less! ! !

Genug mit dem Unsinn, kommen wir zur Sache

Erklären Sie zunächst den Unterschied zwischen Goto und Call für Anfänger

Goto wird verwendet, um zum Code zu springen, also wann Der Code wird zu Goto ausgeführt, an die von Rem angegebene Position springen und nach unten ausgeführt . Nach Abschluss der Ausführung wird nicht zur nächsten Zeile der Goto -Anweisung zurückgekehrt.

Call wird auch zum Springen von Codes verwendet, genauer gesagt wird Call zum Aufrufen von Unterprogrammen verwendet! Was ist ein Anruf? Das heißt, wenn der Aufruf ausgeführt wird, wird die angegebene Unterroutine (Sub) in den Code eingefügt. Wenn die Unterroutine ausgeführt wird, kehrt sie zur nächsten Zeile der Call -Anweisung zurück und setzt die Ausführung nach unten fort.

Wenn es schwer zu verstehen ist, verwenden wir zur Erklärung den Code des am Anfang erwähnten Klassenkameraden:

这是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"//脚本到底部了,执行结束!!!
1.      a=15
2.      b=10
3.      if a-b < 15
4.          call sub1//调用sub1子程序,当子程序执行结束后,返回到此处,继续向下执行
5.          if a-b > -15
6.              call sub2
7.          end if
8.      end if
9.       
10.   Sub sub2()
11.       MsgBox "a-b大于-15"
12.   End Sub
13.    
14.   Sub sub1()
15.       MsgBox "a-b小于15"
16.   End Sub
Dies ist die Goto-Anweisung
Dies ist die Call-Anweisung
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 停止


OK, die beiden Unterschiede wurden klar erklärt. Lassen Sie uns nun über dieses Thema sprechen, die Vor- und Nachteile von Goto-Anweisungen! ! !

Wie ich oben sagte, befürworte ich, dass Goto weniger verwendet werden sollte und nicht missbraucht werden darf. Einer der Hauptgründe ist, dass die Goto-Anweisung die Programmstruktur zerstört und das Programm weniger lesbar macht , Zwei haben vielleicht keine große Wirkung, aber was ist, wenn Sie mehr als ein Dutzend Gotos verwenden?

Die folgende Passage stammt aus der Baidu-Enzyklopädie (wenn Sie der Meinung sind, dass sie zu viel ist, müssen Sie nur den Abschnitt „Ergebnisse der Goto-Anweisung“ lesen)

Ursprung des Problems:

Seit Mitte der 1960er Jahre hat sich die Computerhardware-Technologie von Tag zu Tag verbessert. Die Speicherkapazität, die Rechengeschwindigkeit und die Zuverlässigkeit der Datenverarbeitung sind erheblich gestiegen, und die Kosten für die Herstellung von Hardware sind weiter gesunken. Der Rückgang der Computerpreise hat hervorragende Voraussetzungen für eine breite Anwendung geschaffen. In dieser Situation ist es dringend erforderlich, dass sich Computersoftware daran anpasst. Daher wurden einige Anforderungen für die Entwicklung großer Softwaresysteme gestellt. Der Fortschritt der Softwaretechnologie konnte den Anforderungen der Entwicklung der Situation jedoch nicht gerecht werden. Im Entwicklungsprozess großer Software sind drei Hauptprobleme aufgetreten: hohe Komplexität, langer Entwicklungszyklus und Schwierigkeiten bei der Gewährleistung der Genauigkeit . Es gibt keine Lösung für die aufgetretenen Probleme, was dazu führt, dass sich die Probleme häufen und eine Situation entstehen, die für die Menschen schwer zu kontrollieren ist. Es entsteht die sogenannte „Softwarekrise“. Um diese Krise zu überwinden, ist es einerseits notwendig, eine Reihe von Forschungen zu Themen wie Programmiermethoden, Programmkorrektheit und Softwarezuverlässigkeit durchzuführen, andererseits ist es auch notwendig, Forschungen zu Softwaremethoden durchzuführen Vorbereitung, Prüfung, Wartung und Verwaltung, wodurch Programmiermethodik entsteht.

 Die Ansicht, dass Goto-Anweisungen schädlich sind:

1968 schlug E.W. Dykstra erstmals das Argument vor, dass „GOTO-Anweisungen schädlich sind“, um die traditionellen Programmiermethoden vor Herausforderungen zu stellen die der Diskussion über Programmiermethoden große Aufmerksamkeit geschenkt haben.

 Kontroverse um die Goto-Anweisung:

In den späten 1960er und frühen 1970er Jahren war die Debatte über die Verwendung der GOTO-Anweisung heftig. Leute, die das Entfernen der GOTO-Anweisung aus höheren Programmiersprachen befürworten, glauben, dass die GOTO-Anweisung eine schädliche Anweisung ist, die den größten Einfluss auf die Programmstruktur hat. Ihr Hauptgrund ist, dass die GOTO-Anweisung das Programm statisch macht 🎜> Struktur und dynamische Struktur Inkonsistenzen erschweren das Verständnis und die Fehlerbehebung des Programms. Nach dem Entfernen der GOTO-Anweisung kann der Programmausführungsprozess direkt aus der Programmstruktur abgeleitet werden. Auf diese Weise wird nicht nur die Programmstruktur klar, leicht verständlich und fehlerüberprüfbar gemacht, sondern auch die Korrektheit des Programms nachgewiesen.

Gegner glauben, dass die GOTO-Anweisung flexibler zu verwenden ist und in einigen Fällen die Effizienz des Programms verbessern kann. Wenn die GOTO-Anweisung vollständig gelöscht wird, führt dies in manchen Fällen dazu, dass das Programm zu komplex wird und unnötige Berechnungen erforderlich werden.

Zur Lösung der Goto-Aussage:

1974 gab D.E. Knuth einen umfassenden und fairen Überblick über die Kontroverse um die GOTO-Aussage:

Die uneingeschränkte Verwendung der GOTO-Anweisung, insbesondere die Verwendung der zurückspringenden GOTO-Anweisung, führt zu einer Änderung der Programmstruktur ist schwer zu verstehen. In diesem Fall sollten Sie versuchen, die Verwendung der GOTO-Anweisung zu vermeiden. In anderen Fällen ist es jedoch erforderlich, einige GOTO-Anweisungen kontrolliert zu verwenden, um die Effizienz des Programms zu verbessern, ohne die gute Struktur des Programms zu zerstören. In seinen Worten: „In einigen Fällen befürworte ich die Streichung der GOTO-Erklärung; in anderen Fällen befürworte ich die Einführung der GOTO-Erklärung.“ Seitdem ist diese 10 Jahre alte Debatte beigelegt.

Später bewiesen G. Gaccopini und C. Boehm theoretisch, dass jedes Programm durch Sequenz-, Verzweigungs- und Wiederholungsstrukturen dargestellt werden kann. Diese Schlussfolgerung zeigt, dass das Entfernen der GOTO-Anweisung aus einer höheren Programmiersprache keinen Einfluss auf die Programmierfähigkeiten der höheren Programmiersprache hat und die Struktur des geschriebenen Programms klarer ist. [/hide]

 

goto

Das Ergebnis der Anweisung:

Die goto-Anweisung bleibt in fortgeschrittenen Programmiersprachen

wie C/C++ erhalten, es wird jedoch empfohlen, sie nicht oder nur sparsam zu verwenden. In einigen

aktualisierten höheren Programmiersprachen wie Java, das keine goto-Anweisungen bereitstellt, wird goto zwar als Schlüsselwort angegeben, seine Verwendung wird jedoch nicht unterstützt, wodurch das Programm prägnant und leicht lesbar wird. Dennoch unterstützt C# später immer noch goto. Bei Anweisungen besteht ein Vorteil der goto-Anweisung darin, dass sie sicherstellen kann, dass das Programm einen eindeutigen Ausgang hat, und eine zu große Verschachtelung vermeiden kann.

如果有仔细看上面这段话的同学,相信能明白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代替他

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Vor- und Nachteile der PHP-Goto-Anweisung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn