Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah penilaian litar pintas Go mempengaruhi susunan keadaan dalam ungkapan logik?

Bagaimanakah penilaian litar pintas Go mempengaruhi susunan keadaan dalam ungkapan logik?

Linda Hamilton
Lepaskan: 2024-11-07 17:04:03
asal
783 orang telah melayarinya

How does Go's short circuit evaluation affect the order of conditions in logical expressions?

Penilaian Litar Pendek dalam Go: Perintah dan Prestasi Pelaksanaan

Dalam pengaturcaraan, penilaian litar pintas ialah teknik pengoptimuman di mana ungkapan logik dinilai hanya sebahagiannya jika hasilnya sudah diketahui. Ini boleh meningkatkan prestasi dengan mengelakkan pengiraan yang tidak perlu.

Dalam Go, penilaian litar pintas dilaksanakan untuk && (logik DAN) dan || (logik ATAU) pengendali. Ini bermakna jika operan pertama bagi ungkapan logik dinilai kepada palsu untuk &&, atau benar untuk ||, operan kedua tidak akan dinilai.

Pertimbangkan coretan kod berikut:

if !isValidQueryParams(&queries) || r == nil || len(queries) == 0 {
    return "", fmt.Errorf("invalid querystring")
}
Salin selepas log masuk
if r == nil || len(queries) == 0 || !isValidQueryParams(&queries) {
    return "", fmt.Errorf("invalid querystring")
}
Salin selepas log masuk

Dalam kedua-dua kes, jika r ialah sifar atau len(pertanyaan) ialah 0, panggilan ke isValidQueryParams(&pertanyaan) tidak akan dilaksanakan, tanpa mengira susunan syarat. Ini kerana Go mengikut peraturan penilaian litar pintas.

Untuk menunjukkan perkara ini, pertimbangkan kod berikut:

for i := 0; i < 10; i++ {
    if testFunc(1) || testFunc(2) {
        // do nothing
    }
}

func testFunc(i int) bool {
    fmt.Printf("function %d called\n", i)
    return true
}
Salin selepas log masuk

Menjalankan kod ini akan sentiasa mencetak:

$ function 1 called
$ function 1 called
$ function 1 called
$ function 1 called
$ function 1 called
$ function 1 called
$ function 1 called
$ function 1 called
$ function 1 called
$ function 1 called
Salin selepas log masuk

Ini menunjukkan bahawa Go menilai operan pertama bagi ungkapan OR logik (testFunc(1)) dan serta-merta mengembalikan benar kerana benar || apa-apa pun sentiasa benar. Akibatnya, operan kedua (testFunc(2)) tidak pernah benar-benar dipanggil.

Oleh itu, susunan keadaan dalam ungkapan logik dalam Go boleh memberi kesan pada prestasi apabila penilaian litar pintas digunakan. Susunan optimum akan bergantung pada keadaan tertentu dan kemungkinan setiap keadaan adalah benar atau salah.

Atas ialah kandungan terperinci Bagaimanakah penilaian litar pintas Go mempengaruhi susunan keadaan dalam ungkapan logik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan