อย่าใช้ null ให้ใช้ตัวเลือก
ดังที่คุณได้ชี้ให้เห็นแล้วหนึ่งในปัญหาที่ใหญ่ที่สุดnull
ใน Java คือมันสามารถใช้ได้ทุกที่หรืออย่างน้อยก็สำหรับการอ้างอิงทุกประเภท
เป็นไปไม่ได้ที่จะบอกได้ว่าอาจเป็นnull
และสิ่งที่เป็นไปไม่ได้
Java 8 Optional
เปิดตัวรูปแบบที่ดีมาก:
และตัวอย่างจาก Oracle:
String version = "UNKNOWN";
if(computer != null) {
Soundcard soundcard = computer.getSoundcard();
if(soundcard != null) {
USB usb = soundcard.getUSB();
if(usb != null) {
version = usb.getVersion();
}
}
}
หากแต่ละสิ่งเหล่านี้อาจหรือไม่อาจส่งกลับค่าที่ประสบความสำเร็จคุณสามารถเปลี่ยน API Optional
เป็น:
String name = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
โดยการเข้ารหัสทางเลือกอย่างชัดเจนในประเภทอินเทอร์เฟซของคุณจะดีขึ้นมากและรหัสของคุณจะสะอาดขึ้น
หากคุณไม่ได้ใช้ Java 8 คุณสามารถดูได้com.google.common.base.Optional
ใน Google Guava
คำอธิบายที่ดีจากทีม Guava: https://github.com/google/guava/wiki/UsingAndAvoidingNullExplained
คำอธิบายทั่วไปของข้อเสียเป็นโมฆะโดยมีตัวอย่างจากหลายภาษา: https://www.lucidchart.com/techblog/2015/08/31/the-worst-mistake-of-computer-science/
@Nullull, @Nullable
Java 8 เพิ่มหมายเหตุประกอบเหล่านี้เพื่อช่วยให้เครื่องมือตรวจสอบโค้ดเช่น IDEs ตรวจพบปัญหา พวกมันค่อนข้างมีประสิทธิภาพ จำกัด
ตรวจสอบเมื่อมันทำให้รู้สึก
อย่าเขียนโค้ด 50% ของการตรวจสอบค่าว่างโดยเฉพาะอย่างยิ่งหากไม่มีสิ่งที่เหมาะสมที่รหัสของคุณสามารถทำได้ด้วยnull
ค่า
ในทางกลับกันหากnull
สามารถใช้งานและหมายถึงบางสิ่งได้
ท้ายที่สุดคุณไม่สามารถลบออกnull
จาก Java ได้ ฉันขอแนะนำให้แทนที่สิ่งที่Optional
เป็นนามธรรมเมื่อใดก็ตามที่เป็นไปได้และตรวจสอบnull
เวลาอื่น ๆ ที่คุณสามารถทำสิ่งที่สมเหตุสมผลเกี่ยวกับเรื่องนี้