一看就知道是goto和call分不清的孩子
#然後在群組裡敲程式碼的時候,小貓用了Do...Loop循環,結果群組有個小朋友問Do...Loop循環是什麼? -_-|||結果一群人都說很少用Do...Loop循環,大部分都喜歡用Goto,我才發現這個問題,並不是說不能用Goto,而是少用Goto! ! !
廢話講完了,開始正題
先為新手解釋下Goto和Call的區別
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"//脚本到底部了,执行结束!!! |
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 |
OK,兩種差異講清楚了,現在來講講這次的主題,關於Goto語句的利與弊! ! !
我上面說過,我提倡Goto要少用,絕對不能濫用,其中,最主要的一個原因是,Goto語句破壞了程式結構,使程式可讀性變差,你用一個,兩個或許影響不大,但如果用了十幾個Goto呢?
下面這段話摘自百度百科(如果大家覺得太多了,那麼你只需看「goto語句的結果」那一段)
#問題起源:
# 60年代中期以後,電腦硬體技術日益進步,計算的存貯容量、運算速度和可靠性明顯提高,生產硬體的成本不斷降低。電腦價格的下跌為它的廣泛應用創造了極好的條件。在這種情況下,迫切要求電腦軟體也能與之相適應。因而,一些開發大型軟體系統的要求提了出來。然而軟體技術的進步一直未能滿足情勢發展的需要,在大型軟體的開發過程中出現了複雜程度高、研發週期長、正確性難以保證的三大難題。遇到的問題找不到解決辦法,致使問題堆積起來,形成了人們難以控制的局面,出現了所謂的「軟體危機」。為了克服這一危機,一方面需要對程式設計方法、程式的正確性和軟體的可靠性等問題進行系列的研究;另一方面,也需要對軟體的編制、測試、維護和管理的方法進行研究,從而產生了程式設計方法學。
goto語句是有害的觀點:
1968年,E·W·代克斯特拉首先提出「GOTO語句是有害的」論點,向傳統程式設計方法提出了挑戰,從而引起了人們對程式設計方法討論的普遍重視。
goto語句的爭論:
在60年代末和70年代初,關於GOTO語句的用法的爭論比較激烈。主張從高階程式語言中去掉GOTO語句的人認為,GOTO語句是對程式結構影響最大的一種有害的語句,他們的主要理由是:GOTO語句使程式的靜態結構與動態結構不一致,從而使程序難以理解,難以查錯。去掉GOTO語句後,可直接從程式結構上反映程式運作的過程。這樣,不僅使程序結構清晰,便於理解,便於查錯,也有利於程序的正確性證明。
持反對意見的人認為,GOTO語句使用起來比較靈活,而且有些情形能提高程式的效率。若完全刪除GOTO語句,有些情形反而會讓程式過於複雜,增加一些不必要的運算量。
關於goto語句的解決方法:
1974年,D·E·克努斯對於GOTO語句爭論作了全面公正的評述,其基本觀點是:不加限制地使用GOTO語句,特別是使用往回跳的GOTO語句,會使程式結構難於理解,在這種情形,應盡量避免使用GOTO語句。 但在其他情況下,為了提高程式的效率,同時又不至於破壞程式的良好結構,有控制地使用一些GOTO語句也是必要的。用他的話來說就是:「在有些情形,我主張刪除GOTO語句;在另外一些情形,則主張引進GOTO語句。」從此,使這場長達10年之久的爭論得以平息。
後來,G·加科皮尼和C·波姆從理論上證明了:任何程序都可以用順序、分支和重複結構表示出來。這個結論表明,從高階程式語言中去掉GOTO語句並不影響高階程式語言的程式能力,而且編寫的程式的結構更加清晰。 [/hide]
goto#語句的結果:
########################################################################## # 在C/C++等高階###程式語言###中保留了goto語句,但被建議不用或少用。在一些###更新###的高階程式語言,如Java不提供goto語句,它雖然指定goto作為關鍵字,但不支援它的使用,使程式簡潔易讀;儘管如此後來的c#還是支援goto語句的,goto語句一個好處就是可以保證程式存在唯一的出口,避免了過於龐大的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中文網其他相關文章!