Saya telah mendengar istilah "hubungan arus pendek" yang digunakan dalam C, C ++, C #, Java, dan banyak lainnya. Apa artinya ini dan dalam skenario apa yang akan digunakan?
concepts
conditions
if-statement
fasil
sumber
sumber
&&
operator.||
juga ... setidaknya seharusnya.||
dan&&
ke&
dan|
untuk melihat perbedaan yang halus. Mintalah program sederhana untuk mengevaluasi1 || printf("yay");
vs0 || printf("yay");
dan1 | printf("yay");
vs0 | printf("yay");
untuk melihat perbedaannyaJawaban:
Hubungan arus pendek dalam C adalah ketika operator logis tidak mengevaluasi semua argumennya.
Ambil contoh dan
&&
, sudah cukup jelas bahwa0 && WhoCares
itu akan salah, apa punWhoCares
itu. Karena itu, C hanya melewatkan evaluasiWhoCares
. Sama berlaku untuk1 || WhoCares
, itu akan selalu benar. Karena itu, kita dapat menulis kode sepertiDengan cara ini kami menghindari melakukan beberapa operasi yang tidak mungkin dilakukan. Jika kita tidak dapat menembakkan rudal, kita tentu tidak ingin mencobanya. Ini biasa digunakan dengan pointer, terutama pointer file.
Ini memainkan banyak cara berguna lainnya untuk menghindari komputasi yang tidak perlu
Ini menghindari melakukan pekerjaan ekstra jika kita tidak perlu.
sumber
CanFireMissiles && FireMissiles()
, karena itu membuat saya curiga Anda menyalahgunakan hubungan arus pendek untuk memicu efek samping. Saya merasa seperti Anda menyembunyikan tindakan dalam kondisi. Kode seperti itu lebih baik ditulis sebagaiif(CanFireMissiles){FireMissiles();}
atauif(CanFireMissles){didFireMissiles = TryFireMissiles(); if(didFireMissiles){...}}
.IsInCache(value) || IsInDatabase(value)
, di mana IsInDatabase membutuhkan waktu (terutama jika menggunakan perangkat seluler dan latensi jaringan merupakan masalah)."Hubungan pendek" biasanya mengacu pada " Evaluasi Hubungan Singkat " yang merupakan konsep umum, bukan hanya spesifik C.
Evaluasi operator Boolean dari kiri ke kanan, sehingga istilah apa pun yang akan membuat istilah lain yang tidak perlu berguna. Jadi Anda mungkin memeriksa kondisi yang mengecualikan kondisi lain di kemudian hari, sehingga memungkinkan evaluasi parsial dari operasi logis daripada mengevaluasi semuanya.
Contoh:
Contoh yang lebih kompleks:
sumber
== 0
ini bukan hanya tidak perlu, tetapi mungkin malah membingungkan sebagian orang.Evaluasi ciruit singkat dapat menyebabkan beberapa bagian dari suatu kondisi tidak dievaluasi.
Sebagai contoh:
tidak akan exectue
f
.sumber