उद्धृत पाठ है:
"इस तरह के डिफ़ॉल्ट मूल्यों पर भरोसा करना, हालांकि, आमतौर पर खराब प्रोग्रामिंग शैली माना जाता है।"
निंदनीय: "यह आमतौर पर माना जाता है कि" अक्सर यह कहने का एक तरीका है कि लेखक ने प्रस्तुत कथन के लिए एक आधिकारिक स्रोत खोजने की कोशिश नहीं की है।
इस मामले में दावा स्पष्ट रूप से संदिग्ध है। साक्ष्य: 5 में से 5 जावा स्टाइल गाइड सैंपल कुछ भी नहीं कहते हैं कि आपको डिफ़ॉल्ट मानों पर भरोसा करना चाहिए या नहीं:
(ध्यान दें, नमूने के लिए मेरी कार्यप्रणाली "जावा शैली गाइड" के लिए पहले 5 अलग-अलग Google खोज हिट को देखना था। फिर मैंने "डिफ़ॉल्ट" के लिए प्रत्येक दस्तावेज़ को खोजा। यह पूरी तरह से विश्लेषण नहीं है, लेकिन यह मेरी बात बनाने का काम करता है। )
ठीक। तो क्या यह वास्तव में जावा कोड की पठनीयता में सहायता करता है?
यह बहस का मुद्दा है।
एक तरफ, एक नौसिखिए जावा प्रोग्रामर, जो डिफ़ॉल्ट आरंभीकरण के बारे में नहीं सीख पाया है, इस बारे में चकित हो सकता है कि शून्य या नल कहां से आ रहे हैं। लेकिन अगर वे एक स्पष्ट इनिशियलाइज़ेशन को देखने के लिए परेशान होते हैं और पाते हैं कि कोई एक नहीं है, तो उन्हें डिफ़ॉल्ट इनिशियलाइज़ेशन के बारे में जानने के लिए एक ट्यूटोरियल या पुस्तक पढ़ने के लिए पर्याप्त होना चाहिए। (आप उम्मीद करेंगे!)
दूसरी ओर, हम आमतौर पर नौसिखिया जावा प्रोग्रामर से उत्पादन कोड-बेस बनाए रखने की उम्मीद नहीं करते हैं। एक अनुभवी जावा प्रोग्रामर के लिए एक निरर्थक आरंभीकरण पठनीयता में सुधार नहीं करता है। यह (सबसे अच्छा) शोर है।
मेरे दिमाग में, एक क्षेत्र के निरर्थक आरंभ द्वारा हासिल की गई एकमात्र चीज आपके कोड के भविष्य के पाठक को संकेत देना है कि आपने प्रारंभिक मूल्य के बारे में सोचा है । (जैसा @GhostCat ने व्यक्त किया, डिफ़ॉल्ट आरंभीकरण इरादे का संचार नहीं करता है।)
लेकिन इसके विपरीत अगर मैं वह पाठक होता, तो मुझे जरूरी नहीं कि कोड लेखक की सोच पर भरोसा होता। तो इस "सिग्नल" का मूल्य भी संदिग्ध है।
विश्वसनीयता के बारे में क्या?
जावा में इससे कोई फर्क नहीं पड़ता। JLS निर्दिष्ट करता है कि फ़ील्ड्स के लिए डिफ़ॉल्ट आरंभीकरण होता है। और इसके विपरीत, स्थानीय चर के लिए यह एक चर का उपयोग करने का प्रयास करने के लिए एक संकलन त्रुटि है जिसे निश्चित रूप से प्रारंभ नहीं किया गया है।
संक्षेप में, एक चर का रनटाइम व्यवहार जो स्पष्ट रूप से आरंभिक नहीं है, पूरी तरह से अनुमानित है।
C या C ++ जैसी भाषाओं में इसके विपरीत जहां चर को प्रारंभ नहीं किया जा सकता है, व्यवहार अनिर्दिष्ट है , और क्रैश हो सकता है, और विभिन्न प्लेटफार्मों पर व्यवहार में अंतर हो सकता है। हमेशा स्पष्ट रूप से चर को शुरू करने का मामला यहां बहुत मजबूत है।
प्रदर्शन के बारे में क्या?
इससे कोई फर्क नहीं पड़ना चाहिए। जेआईटी कंपाइलर एक निरर्थक इनिशियलाइज़ेशन और डिफ़ॉल्ट इनिशियलाइज़ेशन को समान करने में सक्षम होना चाहिए।
private int count = 0;
कोड है जो कुछ भी नहीं करता है, और कोड जो कुछ नहीं करता है वह अव्यवस्था है। यह java.lang से कक्षाएं आयात करने या वर्ग घोषित करने जैसा हैextends Object
।