2010-02-21 12 views
5

मैं लोगों के बहुत में देखा है जावा setters में कार्य करें:जावा setters और "इस"

1)

public void setX(int x) { 
    this.x = x; 
} 

निजी तौर पर मुझे यह पसंद नहीं है और मुझे लगता है कि यह कुछ ऐसा होना चाहिए:

2)

public void setX(int newX) { 
    x = newX; 
} 

वहाँ कोई कारण पहले बेहतर होगा रहे हैं?

1) कोई त्रुटि नहीं करना आसान है। कुछ अवसरों पर मैं कर लोगों के लिए नीचे कोड में कीड़े पर नज़र रखी है:

x = x; 

गलती से, हो सकता है क्योंकि वे उपवास टाइपिंग और बस रहे थे रास्ते से बाहर getters और setters प्राप्त करना चाहता था।

+1

मैं भी पहला विकल्प पसंद करता हूं। यकीन नहीं है कि यह क्यों कम किया जा रहा है। – Jorn

+3

ग्रहण और सेटर्स उत्पन्न करते समय ग्रहण स्वचालित रूप से this.x = x शैली का उपयोग करता है। यही कारण है कि इतने सारे लोग उस शैली का उपयोग करते हैं। – chama

+0

मैं दूसरा फॉर्म पसंद करता हूं, हमेशा 'न्यूएक्स' का प्रयोग तर्क नाम के रूप में नहीं करता, लेकिन 'this.x = x;' परिवर्तनीय छिपाने का एक रूप है और इसलिए मैं इसका उपयोग नहीं करता। – rsp

उत्तर

14

यह शैली का विषय है।

public void setX(int x) { this.x = x; } 

के पक्ष में तर्क यह है कि आप के बाद से आपके पास पहले से, इनपुट तर्क के लिए एक नया और सार्थक नाम के बारे में सोच की जरूरत नहीं है है।

एक शैली चुनें और लगातार का उपयोग करें।

+2

के माध्यम से दौड़ने से रोक नहीं सकता हूं और यदि कोई शैली पहले से ही चुनी गई है, तो इसके साथ चिपके रहें। रंगों के लिए – reccles

4

मुझे नहीं लगता कि यहां "बेहतर" या "बदतर" है। यह सिर्फ शैली का मामला है। this.x = x को पसंद करते हैं

+0

किसी त्रुटि के साथ पहली बार आसान नहीं है। कुछ मौकों पर मैंने लोगों को कोड में बग ट्रैक किया है: x = x; गलती से, शायद क्योंकि वे तेजी से टाइप कर रहे थे और बस रास्ते से बाहर निकलने वाले और सेटर्स प्राप्त करना चाहते थे :) – Zubair

+6

किस प्रकार के गेटर्स और सेटर्स? सभी सार्थक आईडीई उन्हें आपके लिए उत्पन्न करेंगे। यदि आप "बहुत तेज टाइप" करते हैं, तो सभी सार्थक आईडीई आपको तुरंत बताएंगे कि "x = x" गलत है। – duffymo

+0

आप अपने सरल सेटर्स को अपने आप से क्यों टाइप कर रहे हैं? ग्रहण चलाएं, क्लिक करें, क्लिक करें, किया गया। – viraptor

7

कारण:

  1. कंस्ट्रक्टर्स में this.x = x का उपयोग करते हुए और एक ज्ञात पैटर्न, जो जावा प्रोग्रामर पहचान है।
  2. दोनों क्षेत्र और पैरामीटर में x समान मान का प्रतिनिधित्व करते हैं।
  3. x = newX के साथ कोई वाक्य रचनात्मक संकेत नहीं है कि कोई एक फ़ील्ड है और दूसरा पैरामीटर है।
1

मुझे लगता है कि सेटर्स आईडीई द्वारा स्वतः उत्पन्न होते हैं। तो मेरी वरीयता वह रूप है जिसका उपयोग आईडीई में डिफ़ॉल्ट रूप से किया जाता है। यही कहना है, मैं इस पर काफी तटस्थ हूं और महसूस करता हूं कि यह डिफ़ॉल्ट आईडीई सेटिंग्स को बदलने में योग्यता नहीं है।

2

मैं this.x = x; पसंद करता हूं। इस पर वास्तव में कोई सही रास्ता नहीं है। एक आईडीई में, यह this पर अतिरिक्त रंग के लिए अच्छा लगेगा।

+1

+1! – bharal

3

यह सिर्फ एक कोडिंग सम्मेलन है। आप चुनने के लिए स्वतंत्र हैं, लेकिन का उपयोग पर करें। साथ ही, एक औसत आईडीई कुछ कीस्ट्रोक/क्लिक में सभी गेटर्स/सेटर्स को स्वत: उत्पन्न कर सकता है। उदाहरण के लिए ग्रहण में, कर Alt + शिफ्ट + आर और फिर एस और उसके बाद गुण आप के लिए getters/setters पैदा करते हैं और ठीक क्लिक करें करना चाहते हैं। साथ ही, this.x = x के बजाय x = x करते समय एक औसत आईडीई चेतावनी प्रदर्शित करेगा।

मैं खुद this.x = x पसंद करता हूं।ग्रहण और कई रिवर्स-इंजीनियर उपकरण (जैसे दली और हाइबरनेट उपकरण) डिफ़ॉल्ट रूप से इसे इस तरह से उत्पन्न करते हैं।

x = newX सम्मेलन (Hungarian notation) केवल (पुरानी शैली की प्रक्रियात्मक प्रोग्रामिंग दुनिया से विरासत में मिला है और ओओ विचारधारा में अच्छी तरह से फिट नहीं है।

+0

क्या रिवर्स एनगिनरिंग टूल्स को यह समझने के लिए "this.x = x" की आवश्यकता होती है? – Zubair

+0

नहीं, यह सिर्फ एक मानक सम्मेलन है जिसका वे पालन करते हैं। – BalusC

+0

हां, आपका अधिकार। मुझे लगता है कि मैं माइक्रोसॉफ्ट सी और सी ++ पर बड़ा हुआ, और इसलिए हंगेरियन नोटेशन उन चीजों में से एक था जो मैंने कभी नहीं बढ़ाया, लेकिन शायद मेरे पास होना चाहिए :) – Zubair

2

यदि यह आपका स्वयं का कोड है या मौजूदा आधार का हिस्सा नहीं है तो उसे चुनें और इसके साथ चिपके रहें। यदि आप मौजूदा कोड के साथ काम कर रहे हैं तो जो भी सम्मेलन पहले से ही इस्तेमाल किया जा रहा है उसका पालन करें।

+0

हां, मैं मानता हूं, कभी-कभी सम्मेलन अधिक महत्वपूर्ण होता है – Zubair

3

यह पूरी तरह से व्यक्तिपरक है, लेकिन प्रथम रूप जावाडोक आदि

मैं वहाँ 'this.x = एक्स' फ़ॉर्म का उपयोग करके त्रुटि के लिए ज्यादा गुंजाइश है नहीं लग रहा है में एक अच्छा स्पष्ट विधि प्रोटोटाइप प्रदान करता है। निश्चित रूप से कुछ भी नहीं जो इकाई परीक्षणों द्वारा पकड़ा नहीं जाएगा। आपके पास यूनिट परीक्षण हैं, है ना?

+0

मेरे पास यूनिट परीक्षण हाँ है , और हमेशा उन्हें लिखें, लेकिन आप इस बात पर हैरान होंगे कि मैं कितनी परियोजनाओं पर गया हूं जहां उनके यूनिट परीक्षणों में उनके पास शायद ही कोई कोड कवरेज है। – Zubair

+0

हां। पैरामीटर के लिए एक फंकी नाम का उपयोग करना (जैसे न्यूएक्स या पीएक्स) सिर्फ जावा डॉक्स खराब दिखता है। –

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