首頁 >後端開發 >Golang >在有條件的 for 迴圈中缺少 return 語句

在有條件的 for 迴圈中缺少 return 語句

PHPz
PHPz轉載
2024-02-09 12:30:09821瀏覽

带条件的 for 循环中缺少 return 语句

在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 的評論擴展為答案,「第一個程式碼......技術上很好」的斷言是錯誤的。

Go 語言規範是這麼說的

還有還有這個

(重點是我添加的)

檢查第一個函數中的程式碼,我們可以看到這些不符合規範的條件:

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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除