Pertama, beberapa latar belakang: Saya seorang guru IT dalam pelatihan dan saya mencoba memperkenalkan operator boolean java ke kelas 10 saya. Guru-mentor saya memeriksa lembar kerja yang saya siapkan dan berkomentar bahwa saya bisa membiarkan mereka menggunakan hanya satu & atau | untuk menunjukkan operator, karena mereka "melakukan hal yang sama".
Saya menyadari perbedaan antara & dan &&.
& adalah operator bitwise yang dimaksudkan untuk digunakan di antara bilangan bulat, untuk melakukan "bit-twiddling".
&& adalah operator kondisional yang dimaksudkan untuk digunakan di antara nilai-nilai boolean.
Untuk membuktikan bahwa operator ini tidak selalu "melakukan hal yang sama", saya mencari contoh di mana menggunakan bitwise antara nilai boolean akan menyebabkan kesalahan. Saya menemukan contoh ini
boolean bitwise;
boolean conditional;
int i=10, j=12;
bitwise = (i<j) | ((i=3) > 5); // value of i after oper: 3
System.out.println(bitwise+ " "+ i);
i=10;
conditional = (i<j) || (i=3) > 5 ; // value of i after oper: 10
System.out.println(conditional+ " "+ i);
i=10;
bitwise = (i>j) & (i=3) > 5; // value of i after oper: 3
System.out.println(bitwise+ " "+ i);
i=10;
conditional = (i>j) && (i=3) > 5; // value of i after oper: 10
System.out.println(conditional+ " "+ i);
Contoh ini menunjukkan bahwa jika suatu nilai harus diubah oleh bagian kedua dari ekspresi, ini akan menyebabkan perbedaan antara hasil, karena bitwise adalah operator yang bersemangat, sedangkan kondisional berperilaku sebagai hubungan pendek (tidak mengevaluasi yang kedua setengah, jika setengah pertama salah dalam kasus && dan benar dalam kasus ||).
Saya punya masalah dengan contoh ini. Mengapa Anda ingin mengubah nilai pada saat yang sama dengan melakukan perbandingan? Sepertinya bukan cara yang kuat untuk kode. Saya selalu enggan melakukan beberapa operasi dalam satu baris dalam kode produksi saya. Sepertinya sesuatu yang "koboi pengkodean" tanpa hati nurani akan pemeliharaan kode-nya. Saya tahu bahwa dalam beberapa kode domain harus sepadat mungkin, tetapi tentunya ini adalah praktik yang buruk pada umumnya?
Saya dapat menjelaskan pilihan saya untuk mendorong penggunaan && dan || lebih & dan | karena ini adalah konvensi pengkodean yang diterima dalam rekayasa perangkat lunak .
Tetapi bisakah seseorang tolong beri saya contoh yang lebih baik, bahkan di dunia nyata, menggunakan operator bitwise dalam ekspresi bersyarat?