Jawaban:
Saya agak bingung dengan dokumentasi C # MSDN yang menyatakan itu
&
dan|
operator logis dan bahwa&&
dan||
adalah operator bersyarat. Saya terus menelepon&&
,||
dan!
operator logis, jadi saya salah?
Tidak; kamu benar.
Ada banyak kesalahan nomenklatur kecil, sebagian besar tidak penting dalam dokumentasi MSDN; Saya mencoba mengeluarkan sebanyak mungkin dari mereka, tetapi dalam kasus-kasus yang tidak salah dan menyesatkan, itu tidak selalu merupakan penggunaan waktu yang bijak. Pergi ke spesifikasi jika Anda ingin pernyataan definitif tentang nama fitur C #.
Jadi: otoritas yang relevan adalah spesifikasi C #, yang menyatakan dalam bagian 7.11:
The
&
,^
dan|
operator disebut operator logika.
Kemudian melanjutkan untuk memecah lebih lanjut operator logis built-in menjadi integer, enumerasi, Boolean dan operator logika nullable-Boolean. Ada juga operator logis yang ditentukan pengguna; lihat spesifikasi untuk detailnya.
Di bagian 7.12 yang kita miliki
The
&&
dan||
operator disebut operator logika kondisional. Mereka juga disebut operator logika "hubungan arus pendek".
Jadi semuanya adalah operator yang logis . Beberapa dari mereka adalah operator logis bersyarat .
Apa yang membuat operator logika kondisional bersyarat ? Orang mungkin membuat dugaan yang salah bahwa itu karena mereka biasanya digunakan dalam pernyataan kondisional ( if
) atau ekspresi kondisional ( ? :
). Alasan sebenarnya diberikan oleh spesifikasi:
The
&&
dan||
operator versi bersyarat dari&
dan|
operator: Operasix && y
sesuai dengan operasix & y
, kecuali bahway
dievaluasi hanya jikax
tidak salah. Operasix || y
sesuai dengan operasix | y
, kecuali yangy
dievaluasi hanya jikax
tidak benar.
Operator logika kondisional dinamai demikian karena operan tangan kanan dievaluasi secara kondisional tergantung pada nilai operan tangan kiri.
Kita dapat melihat ini lebih jelas dengan mencatat bahwa operator logika kondisional hanyalah "gula sintaksis" untuk ekspresi kondisional . x && y
adalah cara menulis yang lebih menyenangkan x ? y : false
, dan cara menulis x || y
yang lebih menyenangkan x ? true : y
. Ekspresi logis bersyarat sebenarnya adalah ekspresi kondisional.
Ada juga bentuk operator logis bersyarat yang ditentukan pengguna, dan sedikit rumit. Lihat spesifikasi untuk detailnya.
Bacaan lebih lanjut, jika subjek ini menarik minat Anda:
Dalam C # ini semua adalah operator logis.
int x = 0xABCD & 0xFF // x == 0xCD
&&
dan ||
disebut " operator logis bersyarat " karena mereka mengalami hubungan arus pendek.
bool someOtherCondition = true;
if (x == 0xEF && someOtherCondition) // someOtherCondition is not evaluated,
// because x == 0xEF is false
Perhatikan bahwa terminologi ini berbeda dari bahasa ke bahasa. Di C dan C ++ &&
dan ||
hanya Operator Logis. Di Jawa, &
dan |
disebut Operator Bitwise , sedangkan C dan C ++ mengklasifikasikan mereka sebagai Operator Aritmatika .
Intinya adalah bahwa &
dan |
merupakan operator bitwise , artinya mereka diterapkan dan menghasilkan nilai string bit. Dan bitwise adalah istilah yang sangat digunakan di kalangan programmer.
Misalnya 0xff & 0x00 == 0x00
, sementara 0xff | 0x00 == 0xff
.
Dan &&
dan ||
diterapkan pada kondisi, dan menghasilkan nilai kondisi yang biasa; yaitu true
dan false
.
Misalnya true && false == false
, sementara true || false == true
.
Oleh karena itu &&
dan ||
bisa disebut operator kondisional , meskipun itu bukan istilah yang biasa di kalangan programmer.
Tentu saja, setiap programmer C, C ++, Java dan C # mengetahui semua itu. Tapi saya kira kesalahpahaman itu terjadi karena "operator kondisional" bukan istilah yang sering digunakan oleh kami programmer.
|
dapat dipertukarkan dengan||
, meskipun dalam banyak kasus mereka dapat dipertukarkan tanpa perubahan nyata dalam perilaku program.