शून्य का उपयोग न करें, वैकल्पिक का उपयोग करें
जैसा कि आपने बताया है, null
जावा में सबसे बड़ी समस्याओं में से एक यह है कि इसका उपयोग हर जगह किया जा सकता है , या कम से कम सभी संदर्भ प्रकारों के लिए।
यह बताना असंभव है कि null
क्या हो सकता है और क्या नहीं।
जावा 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();
}
}
}
यदि इनमें से प्रत्येक एक सफल मान लौटा सकता है या नहीं दे सकता है, तो आप एपीआई को बदल सकते हैं Optional
:
String name = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
प्रकार में वैकल्पिक रूप से एन्कोडिंग को स्पष्ट करके, आपके इंटरफेस बहुत बेहतर होंगे, और आपका कोड क्लीनर होगा।
यदि आप जावा 8 का उपयोग नहीं कर रहे हैं, तो आप com.google.common.base.Optional
Google अमरूद में देख सकते हैं ।
अमरूद टीम द्वारा एक अच्छी व्याख्या: https://github.com/google/guava/wiki/UsingAndAvoidingNullExplained
कई भाषाओं के उदाहरणों के साथ अशक्त करने के लिए नुकसान की एक अधिक सामान्य व्याख्या: https://www.lucidchart.com/techblog/2015/08/31/the-worst-mistake-of-computer-science/
@ नोनल, @ न्यूबल
जावा 8 कोड एनोटेशन को पकड़ने में मदद करने के लिए इन एनोटेशन को जोड़ता है जैसे IDEs समस्याओं को पकड़ते हैं। वे अपनी प्रभावशीलता में काफी सीमित हैं।
जाँच करें कि यह कब समझ में आता है
अपने कोड की 50% जांच शून्य से न लिखें, खासकर अगर कुछ भी समझदार न हो तो आपका कोड एक null
मूल्य के साथ कर सकता है ।
दूसरी ओर, अगर null
इस्तेमाल किया जा सकता है और इसका मतलब कुछ है, तो इसका उपयोग करना सुनिश्चित करें।
अंततः, आप स्पष्ट रूप null
से जावा से नहीं निकाल सकते । Optional
जब भी संभव हो, मैं दृढ़ता से एब्सट्रैक्ट को प्रतिस्थापित करने की सलाह देता हूं , और null
उन अन्य समय की जांच कर रहा हूं कि आप इसके बारे में कुछ उचित कर सकते हैं।