İlk olarak, bir arka plan: Ben bir BT eğitim-öğretmeni ve java'nın boolean operatörlerini 10. sınıfımla tanıştırmaya çalışıyorum. Öğretmen akıl hocam, hazırladığım ve sadece tek bir & "aynı şeyi yapıyorlar" çünkü operatörleri belirtmek için.
& Ve && arasındaki farkın farkındayım.
&, "bit-twiddling" gerçekleştirmek için tamsayılar arasında kullanılmak üzere tasarlanmış bir bitsel operatördür.
&&, boole değerleri arasında kullanılmak üzere tasarlanmış koşullu bir operatördür.
Bu operatörlerin her zaman "aynı şeyi yapmadığını" kanıtlamak için, boole değerleri arasında bitsel kullanmanın bir hataya yol açacağı bir örnek bulmak için yola çıktım. Bu örneği buldum
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);
Bu örnek, bir değerin ifadenin ikinci yarısına kadar değiştirilmesi gerektiğinde, koşulların kısa devre olarak davrandığını ( yarım, ilk yarım yanlışsa && durumunda doğru ise ||).
Bu örnekle ilgili bir sorunum var. Neden bir değeri karşılaştırırken yaptığınız bir değeri değiştirmek istersiniz? Kodlamanın sağlam bir yolu gibi görünmüyor. Üretim kodumda her zaman tek bir satırda birden fazla işlem yapmaktan kaçındım. Kodunun sürdürülebilirliği konusunda vicdanı olmayan "kodlayan bir kovboy" gibi görünüyor. Bazı etki alanlarında kodun olabildiğince kompakt olması gerektiğini biliyorum, ama kesinlikle bu genel olarak kötü bir uygulama mı?
&& ve || kullanımını teşvik etme seçimimi açıklayabilirim fazla & | çünkü bu yazılım mühendisliğinde kabul edilen bir kodlama kuralıdır .
Ama birileri bana koşullu bir ifadede bitsel bir operatör kullanma örneği olarak daha iyi, hatta gerçek bir dünya verebilir mi?