गेटर्स और सेटर्स को परिभाषित करने का कौन सा आदेश है? [बन्द है]


14

क्या गेटर्स और सेटर्स को परिभाषित करने के लिए आदेश का सबसे अच्छा अभ्यास है? दो प्रथाएं लगती हैं:

  • गेटटर / सेटर जोड़े
  • पहले पाने वाले, फिर बसने वाले (या दूसरे तरीके से)

यहां अंतर को रोशन करने के लिए गेट्टर / सेटर जोड़े का एक जावा उदाहरण है:

public class Foo {
    private int var1,
    var2,
    var3;

    public int getVar1() {
    return var1;
    }

    public void setVar1(int var1) {
    this.var1 = var1;
    }

    public int getVar2() {
    return var2;
    }

    public void setVar2(int var2) {
    this.var2 = var2;
    }

    public int getVar3() {
    return var3;
    }

    public void setVar3(int var3) {
    this.var3 = var3;
    }
}

और यहाँ पहले गेटर्स का जावा उदाहरण है, फिर बसता है:

public class Foo {
    private int var1,
    var2,
    var3;

    public int getVar1() {
    return var1;
    }

    public int getVar2() {
    return var2;
    }

    public int getVar3() {
    return var3;
    }

    public void setVar1(int var1) {
    this.var1 = var1;
    }

    public void setVar2(int var2) {
    this.var2 = var2;
    }

    public void setVar3(int var3) {
    this.var3 = var3;
    }
}

मुझे लगता है कि बाद का आदेश देने का प्रकार कोड और कक्षा के आरेखों में स्पष्ट है, लेकिन मुझे नहीं पता कि क्या यह अन्य प्रकार के आदेश देने के लिए पर्याप्त है।

जवाबों:


8

पहला तरीका। यदि यह हमेशा एक साथ समूह में संभव है या संबंधित कार्यों द्वारा बंद रखें जो एक ही सदस्यों पर काम करते हैं।

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

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


क्या आप इसके लिए कोई और तर्क शामिल करना चाहेंगे कि एक ही सदस्यों पर काम करने वाले कार्यों को एक साथ क्यों रखा जाए?
एनएन

कुछ कारणों को जोड़ा।
बेनेडिक्ट

25

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


7
पूरी तरह से सहमत हूँ। इस के "छोटी बातों पर ध्यान नहीं है" शीर्षक है, जो हर किसी की कोडिंग मानक नियम होना चाहिए के तहत आता है # 0 (यह है नियम # 0 "सी ++ कोडिंग मानक" हर्ब Sutter और आंद्रे Alexandrescu द्वारा में।)
डेविड Hammen

मुझे यकीन है कि लोगों ने अंतरिक्ष बार को हिट करने के लिए किस अंगूठे का उपयोग करना चाहिए, इस पर बहुत तर्क दिया है)))
सुपर ऑक्ट

@ मिचेल मैं एक राइट-थम्बर भी हूं। मैंने विशेष रूप से अपने बाएं का उपयोग करने की कोशिश की, लेकिन यह बहुत मुश्किल था और मेरी टाइपिंग एक क्रॉल तक धीमी हो गई।
axblount

@axblount मैं दायाँ हाथ हूँ, लेकिन हमेशा अपने बाएँ अंगूठे का उपयोग करता हूँ। बस मेरे अधिकार की कोशिश की और आपके द्वारा वर्णित एक ही अनुभव था। मैं किसी कारण से अपने बाएं हाथ से "y" भी टाइप करता हूं।
KChaloux

6

यह भाषा पर भी निर्भर कर सकता है। जावा में, ऑर्डर करने का कोई वास्तविक लाभ नहीं है, लेकिन C # में, उदाहरण के लिए, आपके पास "गुण" की अवधारणा है, जो कि गेट्टर और सेटर को एक साथ समूहित करता है, इसलिए यह उस आदेश को लागू करता है। C ++ जैसी भाषा में, जहाँ आप गेटर्स बनाम सेटर (उदाहरण के लिए निजी सेटर, पब्लिक गेट्टर) पर अलग-अलग दृश्यता चाहते हैं, आप शायद इसके विपरीत करेंगे, क्योंकि दृश्यता संशोधक एक बार कई तरीकों के लिए दिया जाता है, बजाय प्रत्येक के लिए व्यक्तिगत रूप से। ।


5

जहां तक ​​मुझे पता है, एक भी सम्मेलन नहीं है। फ़ाइल संगठन पर ओरेकल जावा कोड कन्वेंशनों खंड स्पष्ट रूप से getters और setters के स्थान का उल्लेख नहीं है, लेकिन यह कहना है:

इन विधियों को कार्यक्षेत्र या पहुँच क्षमता के बजाय कार्यक्षमता द्वारा समूहीकृत किया जाना चाहिए।

यह कोई मार्गदर्शन प्रदान नहीं करता है - मैं तर्क दे सकता हूं कि या तो प्लेसमेंट इस मानदंड को पूरा करता है।

विचार करने के लिए कुछ है कि आधुनिक आईडीई आपको पाठ कोड घटक की तुलना में आपकी फ़ाइलों की संरचना के अधिक अमूर्त विचार रखने की अनुमति देता है। यह, शक्तिशाली खोज उपकरणों के साथ युग्मित, फाइलों को नेविगेट करने और यहां तक ​​कि बड़ी फ़ाइलों के भीतर उपयुक्त तरीकों को खोजने के लिए आसान बनाना चाहिए।

एक उदाहरण के रूप में, एक्लिप्स एक आउटलाइन दृश्य प्रदान करता है जो आपको विभिन्न तरीकों से तरीकों और क्षेत्रों को छाँटने और फ़िल्टर करने का अधिकार देता है, और जहाँ वे फाइलों में हैं, वहीं नेविगेट करते हैं। NetBeans में समान कार्यक्षमता थी, और मुझे संदेह होगा कि अधिकांश अन्य IDE भी करते हैं।

यह केवल तभी संभव है जब आप अपने आईडीई के बाहर कोड पढ़ रहे हों। एक उदाहरण एक बाहरी कोड समीक्षा टूल का उपयोग करना या आपके संस्करण नियंत्रण प्रणाली से डेल्टास देखने का हो सकता है।

सबसे अच्छा समाधान केवल एक परियोजना में फ़ाइलों के पार होना होगा। एक मानक खोजें, इसे प्रलेखित करें, और इसके पास रहें।


1

समूह और समूहक को एक साथ एक ही क्षेत्र के लिए जोड़े में समूहित करें।

सभी गेटर्स को एक साथ समूहीकृत करना और सभी बसने वालों को एक साथ यह बताना मुश्किल हो जाता है कि किस क्षेत्र में बस गेटर्स हैं या बस सेटर्स हैं।

जब मैं कोड पढ़ रहा हूं या विशिष्ट कार्यक्षमता की तलाश कर रहा हूं तो मैं एक क्षेत्र को फ़ील्ड के रूप में कल्पना करता हूं, प्रत्येक फ़ील्ड में एक गेटटर और एक सेटर है। यह मेरे लिए कोई मतलब नहीं है कि एक वर्ग के लिए एक गेटर्स समूह और एक बसने वाला समूह है, प्रत्येक के पास फ़ील्ड्स हैं।


तो, आप तर्क देते हैं कि किसी फ़ील्ड के लिए गेटर्स को उस फ़ील्ड के लिए गेटर्स के साथ जोड़ा जाना चाहिए क्योंकि इससे यह अवलोकन करना आसान हो जाता है कि किसी क्लास के कुछ फ़ील्ड्स को कैसे हैंडल किया जाता है?
एनएन

वह और वैचारिक मॉडल जो एक वर्ग है। कक्षाएं मुख्य रूप से कार्यक्षमता द्वारा आयोजित की जानी चाहिए। वर्ग बनाते समय आप यह तय कर सकते हैं कि इसे सार्वजनिक रूप से दृश्यमान, परिवर्तनशील क्षेत्र की आवश्यकता है। यह वैचारिक "कार्यक्षमता" है, न कि गटर और सेटर विधियों के माध्यम से वाक्यगत अभिव्यक्ति।
एम। डुडले

0

कभी जावा आईडीई आपके लिए गेटर्स और सेटर जनरेट कर सकता है। बस उस कार्यक्षमता का उपयोग करें और उन तरीकों के क्रम को छोड़ दें जैसे आईडीई ने इसे बनाया था। यह कोड जनरेट किया गया है, इसे अनावश्यक रूप से न छुएं।


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

सही। डिफ़ॉल्ट विकल्प "गेट्टर / सेटर जोड़े में फ़ील्ड" अधिक उपयोगी लगता है, क्योंकि आप अधिक फ़ील्ड जोड़ सकते हैं और बाद में अधिक एक्सेसर्स उत्पन्न कर सकते हैं, बिना यह चिंता किए कि कौन सी विधि कहाँ जाती है, बस दोनों को अंत में रखें।
user281377
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.