Short circuit AND dan OR

6.7.5 Short circuit AND dan OR

Versi short circuit AND dan OR bekerja lebih efisien dari versi normalnya. Jika kita menggunakan short circuit AND dan operand pertama telah diketahui false, maka operand kedua tidak akan dievaluasi (dan hasilnya adalah false). Jika kita menggunakan AND biasa, kedua operand akan selalu dievaluasi sebelum menyimpulkan hasil akhirnya. Begitu pula dengan short circuit OR. Jika operand pertama nilainya true , maka operand kedua tidak akan dievaluasi dan nilai yang dikembalikan adalah true . Perhatikan tabel berikut:

operand1

operand2

operand1 && operand2

t idak diev aluasi

false false

operand2

operand1 || operand2

t r ue

t idak diev aluasi

Ini contoh penggunaannya yang menggabungkan berbagai operator logical:

[program lengkap] / / Program 6.7 - Oper at or Logical / / Hany a dapat m em inj am buk u bila j um lahny a di at as 0 / / Anggot a biasa hany a dapat m em inj am paling bany ak 10 / / Anggot a spesial dapat m em inj am sebany ak- bany ak ny a

using Syst em ;

class Oper at or Logical {

st at ic v oid Main( ) {

int buku; bool anggot aSpesial; Console. Wr it eLine( " Ber apa j um lah buk u y ang ingin anda pinj am ?" ) ; buk u = int .Par se( Console.ReadLine( ) ) ; Console. Wr it eLine( " Apak ah anda anggot a spesial ( t r ue/ false) ?" ) ; anggot aSpesial = bool. Par se( Console. ReadLine( ) ) ; if( ( buk u > 0) && ( ( buk u < = 10) | | anggot aSpesial) )

Console. Wr it eLine( " Buk u dapat anda pinj am " ) ; else Console. Wr it eLine( " Maaf, anda t ak dapat m em inj am buk u. " ) ; } } [/program lengkap]

Ini contoh outputnya:

[console ] Ber apa j um lah buk u y ang ingin anda pinj am ? 70 Apak ah anda anggot a spesial ( t r ue/ false) ? t r ue Buk u dapat anda pin j a m [/console]

Program di atas menggunakan beberapa operator logical short circuit. Dalam statement if yang ada terdapat expression yang cukup rumit. Inilah gerak lambatnya!

Pertama dilakukan pengecekan, apakah buku yang ingin dipinjam jumlahnya di atas 0?

[kutipan program] [kutipan program]

Expression tersebut merupakan operand bagi operator &&. Jika nilainya false, misalnya jika buku bernilai -999, maka operand ke dua tidak akan dievaluasi dan hasil

keseluruhan adalah false. Jika buku nilainya di atas 0, maka operand ke dua akan dievaluasi.

[kutipan program] if( [ t r u e] && ( ( buku < = 10) | | anggot aSpesial) ) [/kutipan program]

Operand ke dua sendiri merupakan expression yang melibatkan operator ||. Pertama dicek, apakah buku yang ingin dipinjam jumlahnya di bawah atau sama dengan 10? Jika ya, maka jenis anggota peminjam tidak akan dicek sebab anggota biasa dan spesial sama- sama dapat meminjam buku yang jumlahnya kurang dari 11. Jika buku <= 10 nilainya true, hasil expression yang melibatkan || adalah true , dan ini berarti keseluruhan expression nilainya true .

Namun jika buku jumlahnya melebihi 10, dilakukan pengecekan berikutnya :

[kutipan program] if( [ t r u e] && ( [ false] | | anggot aSpesial) ) [/kutipan program]

Apakah peminjam merupakan anggota spesial? Jika anggotaSpesial nilainya true , maka expression yang melibatkan || nilainya true dan keseluruhan expression bernilai true. Jika anggotaSpesial nilainya false, keseluruhan expression akan bernilai false.

Hal yang sama dapat dilakukan menggunakan & dan |, namun seluruh operand akan dievaluasi tanpa memperdulikan nilai operand yang telah dievaluasi. Perhatikan juga bahwa tanda kurung perlu digunakan dalam ((buku <= 10) || anggotaSpesial) sebab operator && prioritasnya lebih tinggi dibandingkan operator ||. Tanda kurung yang digunakan dalam (buku > 0) dan (buku <= 10) digunakan hanya untuk memudahkan pembacaan.