在PHP中,for迴圈是一種常見的迭代結構,用來重複執行一段程式碼。然而,有時候我們可能會在有條件的for迴圈中忘記加入return語句,這會導致程式無法正常回傳結果。在這種情況下,php小編魚仔建議及時檢查程式碼,確保在迴圈中加入適當的return語句,以避免意外的錯誤。這樣可以確保程式碼的可靠性和正確性,提高程式的效率和可維護性。
我注意到,當我寫以下程式碼時,編譯器會產生 missing return statements 錯誤
:
// Similar loops make sense in retry patterns // but this is just a simple example func TestMethod() int { for i := 0; i < 10; i++ { return 0 } }
這是在以下編譯時沒有任何錯誤的情況下:
func TestMethod() int { for { return 0 } }
第一個程式碼在邏輯和技術上都很好,因為該方法不可能無法返回。編譯器顯示該錯誤有什麼原因嗎?還是某種缺失的邏輯或錯誤?
將@Cerise Limón 的評論擴展為答案,「第一個程式碼......技術上很好」的斷言是錯誤的。
還有還有這個:
(重點是我添加的)
檢查第一個函數中的程式碼,我們可以看到這些不符合規範的條件:
func TestMethod() int { for i:= 0; i < 10; i++ { return 0 } }
此函數有一個結果參數(int
傳回值),因此必須以終止語句結束,但函數的最終語句是for
語句有條件,即不是規範所定義的「終止語句」。
這可能看起來很奇怪,但實際上在技術上是正確的。
那為什麼第二個函數沒問題呢?
func TestMethod() int { for { return 0 } }
在本例中,函數中的最終語句是for
,其中無條件 和,沒有引用for 迴圈的break 語句 ,滿足終止語句的語言規範定義。
工作中有邏輯。
如果沒有條件的 for
語句包含 break
,則迴圈可能終止,因此函數需要 return 語句。
如果沒有條件的for
語句不包含break
# (並且沒有return
語句),則迴圈將不會終止(至少不會作為正常執行路徑的結果)需要函數回傳值)。
另外值得注意的是,沒有控制流程分析來確定任何 break
語句是否可達; 它們只需要存在。例如即使 break
明顯無法訪問,以下內容也會觸發「缺少返回」編譯錯誤:
func foo() int { for { if false { break } return 0 } // <-- error: missing return }
以上是在有條件的 for 迴圈中缺少 return 語句的詳細內容。更多資訊請關注PHP中文網其他相關文章!