2008-12-02 15 views
10

मैंने this answer पढ़ा और इसकी टिप्पणियां और मैं उत्सुक हूं: this/Self/Me का उपयोग न करने के कोई कारण हैं?क्या इस "(" सेल्फ "," मी ", ...) का उपयोग न करने के कोई कारण हैं?

बीटीडब्ल्यू: मुझे खेद है कि इससे पहले पूछा गया है, ऐसा लगता है कि SO पर this शब्द खोजना असंभव है।

उत्तर

9

चेतावनी: नीचे शुद्ध रूप से व्यक्तिपरक उत्तर।

मुझे लगता है कि इस/स्वयं/मुझे उपयोग न करने के लिए सबसे अच्छा "कारण" ब्रेवटी है। यदि यह पहले से ही एक सदस्य चर/फ़ंक्शन है तो फिर उपसर्ग को अनावश्यक रूप से क्यों जोड़ें?

व्यक्तिगत रूप से मैं इस/स्वयं/मेरे उपयोग से बचता हूं जब तक कि संकलक के लिए एक विशेष अभिव्यक्ति को असंबद्ध करना आवश्यक न हो। बहुत से लोग इस से असहमत हैं लेकिन मैंने कभी भी किसी भी समूह में वास्तविक चिपकने वाला बिंदु नहीं बनाया है जिसके लिए मैंने काम किया है।

+0

विषयपरक टिप्पणी: इस कारण से, क्या आप अपने कोड में लाइन ब्रेक भी हटाते हैं? आपको पहले मानव पठनीय होने के लिए कोड लिखना चाहिए, फिर दूसरी प्राथमिकता के रूप में मशीन पठनीय। –

+0

@ Torbjørn: क्या होगा यदि वह इस/स्वयं/मुझे अधिक मानव पठनीय छोड़ देता है? –

+0

मुझे यह और अधिक मानव पठनीय लगता है। मैं m _/_ के साथ सदस्य चर का उपसर्ग करता हूं और मुझे m.foo से अधिक पढ़ने योग्य नहीं होने के लिए यह। M_foo पढ़ने लगता है। m_ का मतलब सदस्य है तो अतिरिक्त सामान क्यों जोड़ें? – JaredPar

1

यह वास्तव में से पहले कहा गया था, "जावा में चर" संदर्भ में:

"यह दृश्य शोर आप की जरूरत बढ़ जाती है:

Do you prefix your instance variable with ‘this’ in java ?

मुख्य आवर्तक कारण हो रहा है कोड के अर्थ को खोजने के लिए आगे बढ़ना। "

पठनीयता, दूसरे शब्दों में ... जो मैं नहीं खरीदते हैं, मैं this. बहुत उपयोगी पाते हैं।

1

यह मुझे बकवास की तरह लगता है। 'इस' का उपयोग करके कोड nicer कर सकते हैं, और मैं इसके साथ कोई समस्या नहीं देख सकता। ऐसी नीतियां बेवकूफ हैं (कम से कम जब आप लोगों को यह भी नहीं बताते कि वे क्यों हैं)।

8

मुझे लगता है कि ज्यादातर सामान्य परिदृश्य पहले से उद्धृत दो पदों में शामिल किए गए हैं; मुख्य रूप से संक्षिप्तता और स्पष्टता बनाम अतिरेक - एक छोटी सी अतिरिक्त: सी # में, इसका इस्तेमाल करने के लिए आवश्यक है "इस" एक "विस्तार विधि" वर्तमान प्रकार के लिए तक पहुँचने के लिए -

this.Foo(); 

जहां Foo() बाह्य रूप में घोषित किया जाता है यानी :

public static void Foo(this SomeType obj) {...} 
0

मेरे लिए के रूप में मैं this का उपयोग एक instantiated वस्तु के तरीकों कॉल करने के लिए, जबकि self एक स्थिर विधि

+0

किस भाषा में? –

+0

PHP, यह जावा के लिए भी सच है लेकिन स्वयं के बजाय, वर्गनाम स्वयं उपसर्ग – ken

5

यह कुछ मामलों में स्पष्ट किया, सी # में इस उदाहरण की तरह के लिए है:

public class SomeClass 
{ 
    private string stringvar = ""; 

    public SomeClass(string stringvar) 
    { 
     this.stringvar = stringvar; 
    } 
} 
+0

है लेकिन क्या इसका उपयोग करने का कोई कारण नहीं होगा? (और इसका उपयोग नहीं करना है?) –

+1

पैरामीटर का नाम बदलने का एक कारण होगा;) – boutta

+0

मैं सहमत हूं, पैरामीटर का नाम बदला जाना चाहिए :) लेकिन यह अभी भी दिखाता है कि यह कैसे। यह समझने में मदद करता है कि यह कक्षा निजी चर है और पैरामीटर मधुमक्खी संदर्भित नहीं है। @ डैनियल: हाँ, यह मेरा मुद्दा था। इस उदाहरण में इसका उपयोग करने के लिए अच्छा अर्थ होगा। –

2

मुझे लगता है कि यह एक गैर-मुद्दा है, क्योंकि यह केवल एक अच्छी बात है जो कोड को और अधिक पठनीयता जोड़ता है।

कुछ भाषाओं के लिए, जैसे PHP, यह $- के साथ उपसर्ग करना भी अनिवार्य है-> यदि आपको कक्षा फ़ील्ड या विधियों का उपयोग करने की आवश्यकता है।

मुझे इस तथ्य को पसंद नहीं है कि यह कुछ लाइनों को अनावश्यक रूप से लंबे समय तक बना सकता है, अगर PHP के बिना कक्षा के सदस्यों को संदर्भित करने का कोई तरीका है।

0

अंत में यह हमेशा व्यक्तिगत पसंद का मामला है।व्यक्तिगत रूप से, मैं इस कोडिंग सम्मेलन का उपयोग करें:

public class Foo 
{ 
    public string Bar 
    { 
    get 
    { 
     return this.bar; 
    } 
    /*set 
    { 
     this.bar = value; 
    }*/ 
    } 
    private readonly string bar; 

    public Foo(string bar) 
    { 
    this.bar = bar; 
    } 
} 

तो मेरे लिए "इस" वास्तव में आवश्यक निर्माता पठनीय रखने के लिए है।

संपादित करें: ठीक उसी उदाहरण को "sinje" द्वारा पोस्ट किया गया है जबकि मैं उपरोक्त कोड लिख रहा था।

+0

"रीडोनली" फ़ील्ड के लिए एक सेटटर ... ओह ओह। –

+0

धन्यवाद, सेटटर टिप्पणी की। मैं वास्तविक जीवन में ऐसा नहीं करता हूं, उदाहरण के बारे में सोचते समय बस एक छोटी सी मस्तिष्क त्रुटि ;-) हालांकि, यह वास्तव में यहां मुद्दा नहीं है - उदाहरण "this.bar = bar" पंक्ति के बारे में है। – user39603

2

मैं व्यक्तिगत रूप से लगता है कि this.whatever कम पढ़ी जा सकती है। आप 2-लाइन विधि में अंतर नहीं देख सकते हैं, लेकिन जब तक आप कक्षा में this.variable और this.othervariable प्राप्त नहीं करते हैं तब तक प्रतीक्षा करें।

इसके अलावा, मुझे लगता है कि this. के उपयोग ज्यादा नफरत हंगेरी संकेतन का एक हिस्सा के लिए एक स्थानापन्न के रूप में मिला था। वहां कुछ लोगों ने पाया कि पाठक के लिए यह अभी भी स्पष्ट है कि एक चर एक वर्ग सदस्य है, और this. चाल है। लेकिन अगर हमें अतिरिक्त स्पष्टता की आवश्यकता है, तो इसके लिए खुद को मूर्ख क्यों बनाएं और सादे पुराने "m_" या बस "_" का उपयोग न करें? यह 5 वर्ण बनाम 2 (या यहां तक ​​कि 1) है। कम टाइपिंग, एक ही परिणाम।

ऐसा कहकर, शैली की पसंद अभी भी व्यक्तिगत वरीयता का मामला है। कोड को पढ़ने के लिए उपयोग किए जाने वाले किसी व्यक्ति को यह समझना मुश्किल है कि इसे बदलने के लिए उपयोगी है।

+0

मैं 5 उंगली आंदोलनों :) के रूप में "M_" में गिना जाएगा 1) 'm' 2) 3) '_' 4) घर कुंजी के लिए छोड़ दिया उंगली लौट 5) घर कुंजी का अधिकार उंगली लौट मैं खुद को "यह" टाइप कर सकता हूं। "एम_" से तेज़ : डी और इसका दृश्य विजुअल स्टूडियो के अलावा आईडीई में इंटेलिजेंस का आह्वान करने का लाभ है। –

+0

आप उंगली आंदोलनों के बारे में सही हैं। मैं व्यक्तिगत रूप से सादा _ का उपयोग करना पसंद करता हूं, जो छोटा है। जिसमें से बात कर रहे हैं: मुझे अच्छे ओएल 'सी ++ दिनों से एक अच्छी विज़ुअल असिस्ट सुविधा याद है - टाइपिंग "एम" फिर "शिफ्ट" स्वचालित रूप से "m_" डालेंगी। –

2

अच्छी तरह से ग्रहण तो कम से कम ग्रहण माहौल में काम करने वाक्य रचना क्रम में खेतों भेद करने के लिए कोई जरूरत नहीं है रंग क्षेत्रों, तर्क और विभिन्न रंगों में स्थानीय चर करता है, विशेष रूप से उन्हें खुद के लिए "फील्ड" और आने वाली पीढ़ियों के रूप में चिह्नित करना ।

1

'यह।' कोड में हमेशा मुझे सलाह दी जाती है कि कोडर ने भारी भारोत्तोलन करने के लिए इंटेलिजेंस (या अन्य आईडीई समकक्ष) का उपयोग किया है।

मैं निश्चित रूप से इसके लिए दोषी हूं, हालांकि, मैं पूरी तरह से व्यर्थ कारणों से, उन्हें बाद में हटा देता हूं।

केवल अन्य कारणों से मैं उन्हें इस्तेमाल एक अस्पष्ट चर (बुरा व्यवहार) अर्हता प्राप्त या एक विस्तार विधि

निर्माण आम बात मैं की VB.NET एक में एक चर

string name; //should use something like _name or m_name 

public void SetName(string name) 
{ 
    this.name = name; 
} 
0

योग्यता के लिए कर रहे

Class Test 
    Private IntVar AS Integer 
    Public Function New(intVar As Integer) 
     Me.Intvar = intvar 
    End Function  
End Class 

हर समय नहीं है लेकिन ज्यादातर मेरे/इस/स्वयं काफी उपयोगी है: उपयोग निम्न कोड है। आप जिस दायरे से बात कर रहे हैं उसे स्पष्ट करता है।

3

यदि आप स्टाइलकॉप का उपयोग सभी नियमों के साथ करते हैं, तो यह आपको this. में डाल देता है। चूंकि मैंने इसका उपयोग शुरू किया है, मुझे लगता है कि मेरा कोड अधिक पठनीय है, लेकिन यह व्यक्तिगत वरीयता है।

0

एक ठेठ सेटर विधि में (lagerdalek के जवाब से लिया गया):

string name; 

public void SetName(string name) 
{ 
    this.name = name; 
} 

आप इसका इस्तेमाल नहीं किया, तो संकलक आप सदस्य चर का जिक्र कर रहे थे पता नहीं होता। जो विधि के तत्काल क्षेत्र से बाहर है -
this. के उपयोग संकलक है कि आप एक सदस्य चर का उपयोग करने की जरूरत है बताने के लिए है। किसी वैरिएबल को एक वैरिएबल बनाना जो सदस्य चर के समान नाम है, पूरी तरह से कानूनी है, बस एक वर्ग में एक विधि को ओवरराइड करने की तरह, जिसने एक और वर्ग बढ़ाया है वह पूरी तरह कानूनी है।
हालांकि, अगर आपको अभी भी सुपर क्लास की विधि का उपयोग करने की आवश्यकता है, तो आप इसका उपयोग करके super. का उपयोग करें। सुपर का उपयोग करने से भी बुरा नहीं है। और प्रोग्रामर को उनके कोड में अधिक लचीलापन की अनुमति देता है।

जहां तक ​​मुझे चिंता है कि पठनीयता भी इसमें नहीं आती है, यह आपके चर के अभिगम्यता के बारे में है।

0

न केवल मैं अक्सर "इस" का उपयोग करता हूं। मैं कभी-कभी "उस" का उपयोग करता हूं।

class Foo 
{ 
    private string bar; 

    public int Compare(Foo that) 
    { 
     if(this.bar == that.bar) 
     { 
      ... 

और इसी तरह। मेरे कोड में "वह" आमतौर पर एक ही कक्षा का एक और उदाहरण है।

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