एंड्रॉइड ट्यूटोरियल में अधिकांश फ़ील्ड (क्लास सदस्य) `m` से क्यों शुरू होते हैं?


446

मैं ऊंट मामले के नियमों के बारे में जानता हूं, लेकिन मैं इस मीटर नियम से भ्रमित हूं। इसका मतलब क्या है? मैं एक PHP डेवलपर हूं। "हम" प्रकार के संकेत के रूप में चर के पहले अक्षर का उपयोग करते हैं, जैसे बूलियन के लिए 'बी', पूर्णांक के लिए 'मैं' और इसी तरह।

क्या 'मी' एक जावा चीज़ है? क्या यह मोबाइल के लिए खड़ा है? मिश्रित?


281
कि उपसर्ग पठनीयता को गड़बड़ाने के अलावा कुछ नहीं करता है ...
Dapeng

10
एक उपसर्ग के रूप में संकेत देना बुरा है और हंगेरियन संकेतन देखें thc.org/root/phun/unmaintain.html और kernel.org/doc/Documentation/CodingStyle
Muayyad Alsadi

10
क्योंकि उन्हें जावा कोड शैली के बारे में ज्यादा जानकारी नहीं थी
विक्टर Ionescu

10
मेरी राय में, यदि आपको सदस्य चर से स्थानीय चर को अलग करने में परेशानी हो रही है, तो आपको कोड कन्वेंशन के अनुरूप बहुत बड़ी समस्याएं हैं। यहां वह सम्मेलन है जो मैं कभी-कभी उपयोग करता हूं: लंबे जीवन, लंबे नाम। लघु जीवन, लघु नाम। अब तक उलझन में नहीं थे।
ब्रैंडन

17
एक असली बेवकूफ उपसर्ग। बसने / पाने के लिए अपनी IDE का उपयोग करें और आप getmName () और setmName () के साथ समाप्त करें! इसके अलावा जेनरेटर सेटर, गेटर्स, कॉन्ट्रैक्टर आदि के लिए लोम्बोक जैसे उपकरण मी उपसर्ग उत्पन्न करेंगे। मेरे विकल्प में एम उपसर्ग मूल्य नहीं जोड़ता है और इसे नामकरण सम्मेलन से हटा दिया जाना चाहिए।
userM1433372

जवाबों:


552

यह नोटेशन AOSP (Android Open Source Project) कोड स्टाइल दिशानिर्देशों से योगदानकर्ताओं के लिए आता है :

फील्ड नामकरण सम्मेलनों का पालन करें

  • गैर-सार्वजनिक, गैर-स्थिर फ़ील्ड नाम m से शुरू होते हैं।
  • स्थैतिक क्षेत्र के नाम s से शुरू होते हैं।
  • अन्य क्षेत्र कम केस लेटर से शुरू होते हैं।
  • सार्वजनिक स्थिर अंतिम फ़ील्ड (स्थिरांक) ALL_CAPS_WITH_UNDERSCORES हैं।

ध्यान दें कि एंड्रॉइड ओपन सोर्स प्रोजेक्ट में योगदान के लिए लिंक की गई स्टाइल गाइड कोड के लिए है।

यह अलग-अलग एंड्रॉइड ऐप के कोड के लिए स्टाइल गाइड नहीं है।


33
दिलचस्प .. Google जावा कोड शैली वास्तव में इस बारे में AOSP कोड शैली का खंडन करती है ।
गौतम

51
मुझे लगता है कि इन समयों में यह बकवास है, विशेष रूप से अपने ऐप में करने के लिए! "आपकी कक्षाएं और फ़ंक्शंस इतने छोटे होने चाहिए कि आपको उनकी आवश्यकता न हो। और आपको एक संपादन वातावरण का उपयोग करना चाहिए जो सदस्यों को अलग बनाने के लिए हाइलाइट करता है या रंग बदलता है। इसके अलावा, लोग जल्दी से देखने के लिए उपसर्ग (या प्रत्यय) को अनदेखा करना सीखते हैं। नाम का सार्थक हिस्सा। जितना अधिक हम कोड पढ़ते हैं, उतना ही कम हम उपसर्ग देखते हैं। अंततः उपसर्ग अनदेखी अव्यवस्था और पुराने कोड का एक मार्कर बन जाते हैं। " - स्वच्छ संहिता में रॉबर्ट मार्टिन
mikugo

4
विरोधाभासी Google के जावा स्टाइल गाइड - "गैर-स्थिर क्षेत्र के नाम (स्थिर या अन्यथा) लोअरकैमेलकेस में लिखे गए हैं ... उदाहरण के लिए, computedValues..."
AlikElzin-kilaka

अलग-अलग ऐप्स के लिए, मुझे याद है कि ऐप के नाम के लोअर केस इनीशियल्स को 'मी' की जगह इस्तेमाल करने का सुझाव दिया गया है।
7

4
नियम कोड को हटाने के लिए कृपया
Yahoop

83

बहुत सी कोडिंग गाइड लाइनें एक वर्ग के 'सदस्यों' के लिए m का उपयोग करती हैं। इसलिए जब आप प्रोग्रामिंग कर रहे हैं तो आप स्थानीय और सदस्य चर के बीच अंतर देख सकते हैं।


90
सभी आधुनिक आईडीई रंग और फ़ॉन्ट द्वारा स्थानीय लोगों और सदस्यों को अलग करते हैं, जो कि mउपसर्ग की तुलना में अधिक पठनीय IMHO तरीका है ।
Dzmitry Lazerka

5
माना। मुझे मी चीज़ बहुत कष्टप्रद लगती है, लेकिन केवल इंटेलीजे के भयानक होने के कारण।
ज़कातकार्डी

नियम कोड को हटाने के लिए कृपया
Yahoop

4
अधिकांश कोड समीक्षा टूल में @DzmitryLazerka यू को उजागर करने का यह स्तर नहीं है। तो यह एक बड़े खुले स्रोत परियोजना में समझ में आता है।
JWqvist

@DzmitryLazerka नोटपैड या जीथब और इतने पर कोड पढ़ने के बारे में क्या?
user924

57

mउपसर्ग क्या है ?

mसदस्य चर या डेटा सदस्य के लिए खड़ा है। mगैर-सार्वजनिक और गैर-स्थिर क्षेत्रों के लिए उपसर्ग का उपयोग करें ।

कब इस्तेमाल करें?

private String mCityName;
private float mTemperature;

जब उपयोग करने के लिए नहीं?

public static int mFirstNumber;
public static final String mDATABASE_NAME;

मैं क्या करूं?

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

निष्कर्ष

उपयोग? "हाँ" या "नहीं" आपकी व्यक्तिगत पसंद है।


1
आप इसके लिए भी उपयोग कर सकते हैं public static int, लेकिन sइसके बजाय का उपयोग करें m: public static int sFirstNumber;देखें stackoverflow.com/a/49453184/7767664
user924

31

यदि यह कक्षाओं में सदस्य चर है, तो 'm' का अर्थ 'सदस्य' है। कई जावा प्रोग्रामर ऐसा करते हैं, हालांकि आधुनिक आईडीई के साथ इसकी आवश्यकता नहीं है क्योंकि आपके पास हाइलाइटिंग है, टूलटिप्स पर माउस, आदि।


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

38
नेलर, आप इस का उपयोग करके समान हासिल कर सकते हैं। + ctrl space :)
रोमेन गाइ

3
इसके अलावा, यदि आप कोड सूची का प्रिंट आउट लेते हैं, तो यह मददगार है - आपके पास वहाँ मदद करने के लिए टूलटिप्स नहीं हैं (हाँ, मुझे कोड प्रिंट करना पसंद है और उन्हें एक आसान कुर्सी या कई बार बिस्तर पर पढ़ना भी पसंद है)।
बी क्ले शैनन

3
@domenicop मैं समर्थक m- उपसर्ग नहीं हूँ, हालांकि मुझे लगता है कि विचार एक वर्ग के भीतर विशेषताओं के प्रकार के बीच अंतर करना है। कहा जा रहा है, मैं आमतौर पर सार्वजनिक गैर-स्थिर विशेषताओं का उपयोग कहीं भी नहीं करता, केवल उन वर्गों को छोड़कर, जिनमें विशेष रूप से उन विशेषताओं और कोई व्यावसायिक तर्क नहीं हैं (रिकॉर्ड कक्षाएं)। इस मामले में, एम बेकार है क्योंकि कक्षा में कोई व्यावसायिक तर्क नहीं है। इसलिए, कक्षा के बाहर पठनीयता के लिए इसे निकालना बेहतर होता है (जब आप इन क्षेत्रों का संदर्भ देते हैं)।
Joffrey

2
मेरी राय में यदि आप ऐसे उपसर्गों का उपयोग किए बिना आसानी से खेतों, मापदंडों और चर के बीच अंतर नहीं कर सकते हैं, तो इसका मतलब है कि कोड में कुछ गड़बड़ है। सबसे अधिक संभावना वर्ग या विधि अभी बहुत बड़ी है।
कोनराड मोरावस्की

9

क्लीन कोड बुक के अनुसार, यह एक साफ कोड नहीं है।

आपको m के साथ सदस्य चर उपसर्ग करने की आवश्यकता नहीं है । इसके अलावा, लोग नाम के सार्थक भाग को देखने के लिए उपसर्ग या प्रत्यय को अनदेखा करना सीखते हैं।


9

अगर आपको समस्या है

आपका IDE बसने / पाने वालों को उत्पन्न करता है और आप getmName () और setmName () के साथ समाप्त होते हैं

अगला ( सेटिंग्स / संपादक / कोड स्टाइल / जावा / कोड जनरेशन ) करना न भूलें :

यहां छवि विवरण दर्ज करें

अपडेट: हम कोटलिन में कुछ इस तरह का उपयोग नहीं करते हैं (इसलिए इसे स्विच करने के लिए बेहतर है और अब उपसर्ग का उपयोग न करें)


6

मुझे लगता है कि यह बहुत ही व्यक्तिगत है जो कोड सम्मेलनों का उपयोग किया जाता है। मैं निम्नलिखित उपसर्गों के साथ अपने चरों का नाम देना पसंद करता हूं:

  • एम - विधि चर
  • c - कक्षा चर
  • पी - पैरामीटर चर

लेकिन मुझे लगता है कि प्रत्येक प्रोग्रामर की अपनी शैली है।


7
यह देखते हुए कि अधिकांश जावा देवता IDE का उपयोग करते हैं, जो कक्षा, विधि, स्थैतिक और पैरामीटर चर के लिए अलग-अलग दृश्य शैलियों को सेट करने की अनुमति देता है, मुझे यह अधिक उपयोगी लगता है उदाहरण के लिए स्थैतिक चर / तरीके रेखांकित, इटैलिक में वर्ग चर, और निश्चित रूप से। आप अपने खुद के फोंट और रंग सेट कर सकते हैं। और यह हमेशा काम करेगा चाहे आप उपसर्ग का उपयोग करें। लेकिन, निश्चित रूप से, जब आप आईडीई छोड़ते हैं तो जादू सब खत्म हो जाता है।
ccpizza

4

यह साबित करने के लिए कि आप निश्चित रूप से इस कन्वेंशन को अपने कोड में वैरिएबल के नामकरण के लिए नहीं मानते हैं, मैं यहां एक पेरेंट एंड्रॉइड स्टूडियो से एक स्क्रीनशॉट पास करता हूं ।

उस वस्तु के अंदर के चर खोजें जो विशेष रूप से आपके मूल चर से कम m- चर रखने के लिए छांटे गए हों । इसलिए "m" उपसर्ग के साथ अपने कोड में उनका नामकरण करके आप उन्हें अपने आप से ढेर में छिपाते हैं

यहां छवि विवरण दर्ज करें


3

इस कोड शैली से मुझे जो लाभ मिला, वह यह है कि जब किसी चर के संदर्भ में ऑटो-पूर्ण होता है, तो मुझे पता है कि मैं सिर्फ सदस्य चर देखने के लिए "m" टाइप कर सकता हूं।


2

जैसा कि पहले उल्लेख किया गया था, इसे अलग-अलग चर के लिए स्टाइल किया गया है। लेकिन यह भी कोड-पीढ़ी के लिए बहुत उपयोगी है। यदि आप "ऑल्ट + इंसर्ट" दबाते हैं, तो आपको अधिकांश सामान्य कोड पीढ़ियों के गुणों के लिए खिड़कियां मिलेंगी। यदि आप अपने चर के लिए "प्राप्त" विधि उत्पन्न करना चाहते हैं तो आपको मिलेगा।

public class Foo{
   private int bar;

   public int getBar(){
       return this.bar;
   }

   public void setBar(int bar){
       this.bar = bar; 
   }

}

लेकिन अगर आप "मी, एस" घोषित करते हैं:

public class Foo{
private int mBar;

public int getBar(){
   return mBar;
}

public void setBar(int bar){
   mBar = bar;
}
}

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


2

ऐसा लगता है कि कुछ शुरुआती एंड्रॉइड / Google इंजीनियरों की व्यक्तिगत प्राथमिकता थी कि वे 'm' के साथ सदस्य चर शुरू कर सकें और इसलिए उन्होंने इसकी सिफारिश की।

अब इस नियम को उन कंपनियों के डेवलपर्स के गले के नीचे उतार दिया जा रहा है जो न तो AOSP योगदानकर्ता हैं, केवल इसलिए कि उस पृष्ठ को Android Android स्टाइल नियम माना जाता है। उस नियम में कोई लाभ होने पर बहुत कम है। Google को इसे हटाने पर विचार करना चाहिए। अन्यथा कृपया निर्दिष्ट करें कि Android ऐप्स के लिए कौन सी कोड शैली नियम वैकल्पिक हैं।

नियम को हटाने के लिए कृपया इस याचिका के समर्थन में अपनी टिप्पणी जोड़ें https://code.google.com/p/android/issues/detail?id=226814


2

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


1

यह भी कहा जा सकता है कि यह "मेरा" के लिए खड़ा है, जैसा कि क्लास / इंस्टेंस में कह रहा है "यह चर मेरा है और कोई और इसे प्राप्त नहीं कर सकता है।" स्थिर से भिन्न जो, जबकि यह केवल उस वर्ग के लिए उपलब्ध हो सकता है जिसे उस वर्ग के सभी उदाहरणों द्वारा साझा किया जाता है। जैसे यदि आप वृत्त बना रहे हैं तो आपको यह जानना होगा कि प्रत्येक वृत्त की त्रिज्या कितनी बड़ी है

    private double mRadius;

लेकिन एक ही समय में आप सभी सर्किलों का ट्रैक रखने के लिए एक काउंटर चाहते हैं, जो आपके पास हो सकते हैं

    private static int sCircleCount;

और फिर आपके पास वर्तमान में मौजूद मंडलियों की संख्या बढ़ाने और घटाने के लिए स्थिर सदस्य हैं।


1

निम्नलिखित नामकरण परंपराएं हैं,

  • गैर-सार्वजनिक, गैर-स्थिर फ़ील्ड नाम m से शुरू होते हैं।
  • स्थैतिक क्षेत्र के नाम s से शुरू होते हैं।
  • अन्य क्षेत्र कम केस लेटर से शुरू होते हैं।
  • सार्वजनिक स्थिर अंतिम फ़ील्ड (स्थिरांक) ALL_CAPS_WITH_UNDERSCORES हैं।

उदाहरण:

public class MyClass {
    public static final int SOME_CONSTANT = 42;
    public int publicField;
    private static MyClass sSingleton;
    int mPackagePrivate;
    private int mPrivate;
    protected int mProtected;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.