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

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

Linda Hamilton
Linda Hamiltonasal
2024-11-07 17:04:03695semak imbas

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")
}
if r == nil || len(queries) == 0 || !isValidQueryParams(&queries) {
    return "", fmt.Errorf("invalid querystring")
}

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
}

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

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!

Kenyataan:
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