Penyataan pulangan tiada dalam gelung bersyarat

PHPz
Lepaskan: 2024-02-09 12:30:09
ke hadapan
794 orang telah melayarinya

带条件的 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
    }
}
Salin selepas log masuk

Ini adalah apabila yang berikut disusun tanpa sebarang ralat:

func TestMethod() int {
    for {
        return 0
    }
}
Salin selepas log masuk

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
    }
}
Salin selepas log masuk

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
    }
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!