2012-05-21 15 views
26

संभव डुप्लिकेट:
When should one use final?क्या कहीं भी संभव हो "चर" चर घोषित करना एक अच्छा अभ्यास है?

मैं सभी चर घोषित करने के लिए final आवश्यकता न होने पर करते हैं। मैं इसे एक अच्छा अभ्यास मानता हूं क्योंकि यह संकलक को यह जांचने की अनुमति देता है कि पहचानकर्ता का उपयोग किया जाता है जैसा कि मैं उम्मीद करता हूं (उदा। यह उत्परिवर्तित नहीं है)। दूसरी तरफ यह कोड को बंद कर देता है, और शायद यह "जावा रास्ता" नहीं है।

मुझे आश्चर्य है कि अंतिम चर के गैर-आवश्यक उपयोग के संबंध में आम तौर पर स्वीकार्य सर्वोत्तम अभ्यास है, और यदि इस चर्चा के लिए अन्य ट्रेडऑफ या पहलू हैं जिन्हें अवगत कराया जाना चाहिए।

+1

वैकल्पिक कोड का विचार जो डेवलपर इरादे को व्यक्त या व्यक्त नहीं कर सकता है और जो कि एक्सकेसीडी कॉमिक से कुछ की तरह लगता है या नहीं हो सकता है। – jordanpg

+0

बड़ी बात यह है कि आप अंतिम रूप से क्या मतलब रखते हैं उससे सावधान रहना है। अंतिम उत्परिवर्तनीय वस्तुओं को अभी भी संशोधित किया जा सकता है, जो कुछ नए लोग भूल जाते हैं। यह वास्तव में अंतिम समस्या के साथ मेरी बड़ी समस्या है, जब भी मैं एक परिवर्तनीय वस्तु के साथ काम कर रहा हूं * अंतिम का इरादा * गड़बड़ हो जाता है, मुझे शाब्दिक अर्थ पता है, लेकिन क्या अंतिम व्यक्ति का उपयोग करने वाला व्यक्ति वास्तव में ऑब्जेक्ट की सामग्री को संशोधित करता है भले ही यह अंतिम है या नहीं? – dsollen

उत्तर

0

पीएमडी जैसे कुछ अच्छे विश्लेषण उपकरण, हमेशा आवश्यक होने तक final रखने की सलाह देते हैं। तो उस उपकरण में सम्मेलन का कहना है कि यह एक अच्छा अभ्यास है

लेकिन मुझे लगता है कि कोड में इतने सारे अंतिम टोकन इसे कम मानव-अनुकूल बना सकते हैं।

10

मैं संकलक के मुकाबले रखरखाव प्रोग्रामर (मुझे सहित!) के लिए यह अच्छा अभ्यास मानता हूं। अगर मुझे चिंता करने की ज़रूरत नहीं है कि इसके अंदर कौन से चर बदल रहे हैं, तो इस बारे में चिंता करने की आवश्यकता नहीं है।

+0

हां! यह वास्तव में एक अच्छा मुद्दा है। पठनीयता बढ़ा दी गई है क्योंकि आप तुरंत जानते हैं कि यह चर बदलना नहीं है। यह सोचने के लिए आसान बनाता है। –

+0

मैं इसे थोड़ा सा स्पष्ट करता हूं, ज्यादातर जावा नए लोगों के लिए जो इसे गलत तरीके से पढ़ सकते हैं। मेरा पहला आलसी पढ़ना मुझे लगता था कि आप कह रहे थे कि मौजूदा विधि का उपयोग करना आसान था क्योंकि आपको कुछ भी बदलने की विधि के बारे में चिंता करने की ज़रूरत नहीं थी, जिसने कोई फर्क नहीं पड़ता क्योंकि उसके खिलाफ फाइनियल रक्षा नहीं करता है। पुन: पढ़ने पर मुझे पूरा यकीन है कि आपका मतलब है कि जब आप एक मौजूदा विधि को पढ़ते हैं और यह पता लगाते हैं कि यह क्या करता है, तो इसे अंतिम रूप देने के लिए पार्स करना आसान होता है, जो अधिक समझ में आता है। हालांकि, मुझे डर होगा कि नौसिखिया जावा लोग इसे मूल तरीके से पढ़ सकते हैं और यह महसूस करने के लिए बहुत नए हो सकते हैं कि काम नहीं करता है। – dsollen

2

यह निश्चित रूप से आपको एक बेहतर कोड देता है, यह देखने में आसान है कि सभी चर बदलने जा रहे हैं।

यह संकलक को सूचित करता है कि यह बदलने वाला नहीं है जिसके परिणामस्वरूप बेहतर अनुकूलन हो सकता है।

इसके साथ-साथ यदि आप कोई गलती करते हैं तो यह आपके आईडीई को संकलित समय अधिसूचना देने की अनुमति देता है।

+0

मैं असहमत हूं। आप संग्रह को अंतिम के रूप में घोषित कर सकते हैं लेकिन फिर भी आप इसकी सामग्री को बदल सकेंगे ... केवल एक चीज जो आप करने में सक्षम नहीं होंगे, वह एक और संदर्भ असाइन कर रही है! जब आवश्यक हो तो मैं फ़ील्ड के लिए फाइनल का उपयोग करने के लिए सहमत हूं लेकिन स्थानीय विधि चर के लिए ??? उनका दायरा काफी सीमित होना चाहिए ... यह सिर्फ मेरी राय है .. – Lawrence

0

आप काफी पक्ष-विपक्ष ...

मैं सिर्फ एक और चोर जोड़ सकते हैं माथुर:

कोड के पाठक एक अंतिम चर के मूल्य के बारे में बिल्कुल भी कारण के लिए नहीं (जरूरत दुर्लभ खराब कोड मामलों को छोड़कर)।

तो, हाँ, यह एक अच्छा अभ्यास है।

और जब आप इसका उपयोग करते हैं तो अव्यवस्था खराब नहीं होती है (जैसे यूनिक्स: -पी)। इसके अलावा, सामान्य आईडीई इसे स्वचालित रूप से ya के लिए करते हैं ...

12

"जावा मार्ग" स्वाभाविक रूप से आंतरिक रूप से अव्यवस्थित है।

मैं कहता हूं कि यह एक अच्छा अभ्यास है, लेकिन मैं इसका पालन नहीं करता हूं।

टेस्ट आम तौर पर सुनिश्चित करते हैं कि मैं जो कर रहा हूं वह कर रहा हूं, और यह भी मेरे सौंदर्यशास्त्र के लिए अव्यवस्था है।

+1

यह ठीक है कि मैं इसके बारे में कैसा महसूस करता हूं। मैं केवल अपने स्थिर तारों में अंतिम का उपयोग करता हूं। चूंकि जावा ऑब्जेक्ट्स को मूल्य से गुजरता है (सी के विपरीत) में फाइनल का उपयोग केवल सामान को अपनाने वाला होता है। अंत में, आप या तो जानते हैं कि आप क्या कर रहे हैं या आप नहीं करते हैं। मेरे पास कभी भी एक बग नहीं है जो अंतिम के उपयोग से रोका जा सकता था ... कभी नहीं! – Lawrence

3

हां, यह एक बहुत अच्छा विचार है, क्योंकि यह स्पष्ट रूप से दिखाता है कि ऑब्जेक्ट निर्माण पर कौन से फ़ील्ड प्रदान किए जाने चाहिए।

मैं दृढ़ता से असहमत हूं कि यह "कोड अव्यवस्था" बनाता है; यह भाषा का एक अच्छा और शक्तिशाली पहलू है।

एक डिजाइन सिद्धांत के रूप में, आपको अपनी कक्षा immutable (सभी अंतिम फ़ील्ड) बनाना चाहिए, यदि आप सुरक्षित रूप से प्रकाशित हो सकते हैं (यानी बिना डर ​​के स्वतंत्र रूप से पारित हो जाते हैं तो वे भ्रष्ट हो जाएंगे)। हालांकि ध्यान दें कि खेतों को खुद को अपरिवर्तनीय वस्तुओं की भी आवश्यकता है।

0

मैं हाँ कहूंगा, संकलक अनुकूलन के लिए इतना नहीं, बल्कि पढ़ने योग्यता के लिए।

लेकिन व्यक्तिगत रूप से मैं इसका उपयोग नहीं करता हूं। जावा स्वयं ही काफी वर्बोज़ है, और यदि हम "अच्छी प्रैक्टिस" मानी गई सभी चीजों का पालन करते हैं, तो कोड सभी बॉयलरप्लेट से अपरिहार्य होगा। हालांकि, वरीयता का मामला है।

7

मैं नियमित तौर पर मेरी कोड में स्थानीय चर को final लागू करते हैं और इसके साथ ही पढ़ने कोड बहुत आसान पहले सभी effictively अंतिमfinal कीवर्ड के साथ चर चिह्नित करने के बाद लगता है। मैं इसे कोड में एक व्यापक वृद्धि के रूप में मानता हूं, और उसके बाद इसे सही करता हूं।

स्थानीय अव्यवस्थाओं पर लागू होने पर कोड अव्यवस्था की चिंता के लिए मुझे यह हानिकारक नहीं लगता है — वास्तव में यह मुझे सिंटैक्स रंग के कारण सभी घोषणाओं को आसानी से स्थानांतरित करता है।

मैं मानता चाहिए, हालांकि, कि मैं यह unbearably cluttery जब final, बढ़ाया-के लिए छोरों और संकीर्ण अर्थ में स्थानीय चर को छोड़कर अन्य सभी स्थानों पैरामीटर, पकड़ ब्लॉक पर प्रयोग किया जाता है कैसे पता करूँ । यह काफी दुर्भाग्यपूर्ण है क्योंकि इन मामलों में पुन: असाइनमेंट और भी भ्रमित है और उन्हें वास्तव में डिफ़ॉल्ट रूप से अंतिम रूप दिया जाना चाहिए।

संबंधित मुद्दे