มีวิธีที่ดีกว่าในการลบบูลีนใน Java มากกว่าวิธีง่าย ๆ ไหม?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
มีวิธีที่ดีกว่าในการลบบูลีนใน Java มากกว่าวิธีง่าย ๆ ไหม?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
คำตอบ:
theBoolean = !theBoolean;
!!bool == !(!(bool)) == bool
@ypnos:
--
โอเปอเรเตอร์ (อันที่จริงแล้วสองรายการพร้อมด้วย++
โอเปอเรเตอร์สองรายการ) แต่ไม่ได้กำหนด!!
โอเปอเรเตอร์ ถ้าคุณต้องการ-(-(integer))
คุณสามารถใช้ช่องว่างระหว่าง-
ตัวละครทั้งสอง แต่!!
แยกวิเคราะห์เป็น!
ตัวดำเนินการสองตัวโดยไม่คำนึงถึงพื้นที่สีขาว
theBoolean ^= true;
กดแป้นน้อยลงหากตัวแปรของคุณยาวเกินสี่ตัวอักษร
แก้ไข : รหัสมีแนวโน้มที่จะส่งคืนผลลัพธ์ที่เป็นประโยชน์เมื่อใช้เป็นคำค้นหาของ Google รหัสข้างต้นไม่ได้ สำหรับผู้ที่ต้องการมันก็XOR บิตเป็นอธิบายไว้ที่นี่
theBoolean = !theBoolean;
หรือtheBoolean = theBoolean ? false : true;
วิธี "ชัดเจน" (สำหรับคนส่วนใหญ่)
theBoolean = !theBoolean;
วิธี "สั้นที่สุด" (เกือบตลอดเวลา)
theBoolean ^= true;
วิธีที่ "มองเห็นได้มากที่สุด" (ไม่แน่นอนที่สุด)
theBoolean = theBoolean ? false : true;
theMethod( theBoolean ^= true );
เนื่องจากตัวดำเนินการกำหนดส่งคืนสิ่งที่ได้รับมอบหมายเสมอสิ่งนี้จะสลับค่าผ่านตัวดำเนินการระดับบิตแล้วส่งคืนค่าที่กำหนดใหม่ที่จะใช้ในการเรียกใช้เมธอด
C
แน่นอน แต่ในJava
มันไม่ได้รับอนุญาตให้ผสมบูลีนและจำนวนเต็ม (เช่นสิ่งที่while(1)
เป็นไปไม่ได้ใน Java)
หากคุณใช้ค่าบูลีน NULL และพิจารณาว่าเป็นเท็จลองสิ่งนี้:
static public boolean toggle(Boolean aBoolean) {
if (aBoolean == null) return true;
else return !aBoolean;
}
หากคุณไม่ได้ส่งค่า NULL ของบูลีนลองสิ่งนี้:
static public boolean toggle(boolean aBoolean) {
return !aBoolean;
}
สิ่งเหล่านี้สะอาดที่สุดเพราะพวกเขาแสดงเจตนาในลายเซ็นวิธีการนั้นง่ายต่อการอ่านเปรียบเทียบกับ! ตัวดำเนินการและสามารถดีบั๊กได้ง่าย
การใช้
boolean bTrue = true
boolean bFalse = false
boolean bNull = null
toggle(bTrue) // == false
toggle(bFalse) // == true
toggle(bNull) // == true
แน่นอนถ้าคุณใช้Groovyหรือภาษาที่อนุญาตวิธีการส่วนขยายคุณสามารถลงทะเบียนส่วนขยายและทำง่ายๆ
Boolean b = false
b = b.toggle() // == true
Boolean
และสลับมันจริงๆภายในวิธีการ (แต่ยังค่อนข้างคลุมเครือ)
คำตอบนี้เกิดขึ้นเมื่อค้นหา "ฟังก์ชั่น java invert boolean" ตัวอย่างด้านล่างจะป้องกันเครื่องมือการวิเคราะห์แบบสแตติกบางอย่างจากความล้มเหลวในการสร้างเนื่องจากตรรกะการแตกแขนง สิ่งนี้มีประโยชน์หากคุณต้องการสลับบูลีนและยังไม่ได้สร้างการทดสอบหน่วยที่ครอบคลุม;)
Boolean.valueOf(aBool).equals(false)
หรืออีกทางหนึ่ง:
Boolean.FALSE.equals(aBool)
หรือ
Boolean.FALSE::equals
Boolean.FALSE::equals
ไปยังฟังก์ชั่นการทำแผนที่แทนการเขียนแลมบ์ดาเล็กน้อย
หากคุณไม่ได้ทำสิ่งใดโดยเฉพาะมืออาชีพคุณสามารถใช้คลาส Util ได้ตลอดเวลา ตัวอย่างคลาส util จากโครงงานสำหรับคลาส
public class Util {
public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }
}
จากนั้นเพียงแค่สร้างวัตถุ Util
Util u = new Util();
และมีบางสิ่งบางอย่างสำหรับการส่งคืนSystem.out.println( u.flip(bool) );
หากคุณกำลังจะจบลงด้วยการใช้สิ่งเดียวกันซ้ำไปซ้ำมาใช้วิธีการและโดยเฉพาะอย่างยิ่งถ้ามันข้ามโครงการทำคลาส Util Dunno มาตรฐานอุตสาหกรรมเป็นอย่างไร (โปรแกรมเมอร์ที่มีประสบการณ์รู้สึกฟรีเพื่อแก้ไขฉัน)
ชั้นBooleanUtils
สนับสนุนการปฏิเสธของบูลีน คุณพบคลาสนี้ในcommons-lang: commons-lang
BooleanUtils.negate(theBoolean)
ก่อน:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
หลังจาก:
boolean result = isresult();
result ^= true;