Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penyataan pulangan tiada dalam gelung bersyarat

Penyataan pulangan tiada dalam gelung bersyarat

PHPz
PHPzke hadapan
2024-02-09 12:30:09795semak imbas

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

Dalam PHP, gelung for ialah struktur lelaran biasa yang digunakan untuk melaksanakan sekeping kod berulang kali. Walau bagaimanapun, kadangkala kita mungkin terlupa untuk menambah penyata pulangan dalam gelung bersyarat, yang akan menyebabkan atur cara gagal mengembalikan hasil seperti biasa. Dalam kes ini, editor PHP Yuzai mengesyorkan menyemak kod tepat pada masanya untuk memastikan penyataan pulangan yang sesuai ditambahkan pada gelung untuk mengelakkan ralat yang tidak dijangka. Ini boleh memastikan kebolehpercayaan dan ketepatan kod dan meningkatkan kecekapan dan kebolehselenggaraan program.

Kandungan soalan

Saya perasan bahawa apabila saya menulis kod berikut, pengkompil menghasilkan 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
    }
}

Ini adalah apabila yang berikut disusun tanpa sebarang ralat:

func TestMethod() int {
    for {
        return 0
    }
}

Kod pertama secara logik dan teknikal baik kerana mustahil kaedah itu gagal dikembalikan. Adakah terdapat sebarang sebab mengapa pengkompil menunjukkan ralat ini? Atau adakah ia sejenis logik atau pepijat yang hilang?

Penyelesaian

Memperluaskan ulasan @Cerise Limón kepada jawapan, dakwaan bahawa "kod pertama... secara teknikalnya baik" adalah salah.

Spesifikasi bahasa Go mengatakan ini:

Jugadan ini:

(penekanan ditambah oleh saya)

Memeriksa kod dalam fungsi pertama, kita dapat melihat bahawa syarat spesifikasi ini tidak dipenuhi:

func TestMethod() int {
    for i:= 0; i < 10; i++ {
        return 0
    }
}

Fungsi mempunyai parameter hasil (int 返回值),因此必须以终止语句结束,但该函数的最终语句是 for pernyataan dengan syarat , iaitu bukan "penyataan penamatan" seperti yang ditakrifkan oleh spesifikasi.

Ini mungkin kelihatan pelik, tetapi ia sebenarnya betul dari segi teknikal.

Bahan Bonus

Jadi kenapa fungsi kedua okay?

func TestMethod() int {
    for {
        return 0
    }
}

Dalam kes ini, pernyataan akhir dalam fungsi ialah for, di mana adalah tanpa syarat dan , tidak mempunyai pernyataan putus yang merujuk gelung for, memenuhi definisi spesifikasi bahasa bagi pernyataan penamat.

Ada logik dalam kerja anda.

Jika pernyataan for 语句包含 break tanpa syarat mengandungi pecah, gelung boleh ditamatkan, jadi fungsi memerlukan pernyataan pulangan.

Jika pernyataan for 语句包含 break (并且没有 return tanpa syarat

tidak

mengandungi break (dan tiada pernyataan return), gelung itu tidak akan ditamatkan (sekurang-kurangnya bukan hasil daripada pelaksanaan biasa laluan) memerlukan nilai pulangan fungsi). break 语句是否可达; 它们只需要存在。例如即使 break

Perlu diambil perhatian bahawa tiada analisis aliran kawalan untuk menentukan sama ada sebarang pernyataan break boleh dicapai 🎜mereka hanya perlu wujud🎜. Sebagai contoh, perkara berikut akan mencetuskan ralat kompilasi "missing return" walaupun break jelas tidak boleh diakses: 🎜
func foo() int {
    for {
        if false {
            break
        }
        return 0
    }
    // <-- error: missing return
}

Atas ialah kandungan terperinci Penyataan pulangan tiada dalam gelung bersyarat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam