10

मैं ग्रोवी भाषा में जा रहा हूं, जिसमें गतिशील टाइपिंग (साथ ही वैकल्पिक स्थैतिक टाइपिंग) है। इसमें लिस्ट, मैप्स और रेंज के लिए भी मूल समर्थन है, इसलिए मैं सूचियों और मानचित्रों का उपयोग करता हूं, विशेष रूप से सूचियों की सूची, मानचित्रों की सूचियां, सूचियों के मानचित्र इत्यादि।डायनामिक रूप से टाइप की गई भाषाओं में मानचित्र/सूचियों के लिए परिवर्तनीय नामकरण सम्मेलन

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

उदाहरण के लिए, मान लीजिए कि मेरे पास तारीखों का नक्शा कुंजी के रूप में महत्वपूर्ण और पूर्णांक है। या पूर्णांक की सूची, या मानचित्रों की सूची जिसमें तारों और खाता वस्तुओं के रूप में स्ट्रिंग्स मान के रूप में होते हैं।

ऐसा लगता है कि वेरिएबल नामों के पीछे एक स्पष्ट सम्मेलन बनाने में मुझे यह देखने में मदद मिलेगी कि मैं किस डेटा प्रकार की संरचना को देखे बिना इसे देख रहा हूं।

कोई सुझाव?

+1

यह है एक दयालुता टिप्पणियों को कम करने की कोई क्षमता नहीं है। यह एक पूरी तरह से स्वीकार्य सवाल प्रतीत होता है। –

+0

@ डेविड, टिप्पणियां * * "कठोर" या "गैर-रचनात्मक" के लिए ध्वजांकित की जा सकती हैं। – leoger

+0

हालांकि "डीफ़" का उपयोग करना आम है, यह जावा प्रोग्रामर के लिए असहज हो सकता है, और "स्ट्रिंग" या "मैप" पर "डीफ़" का उपयोग करने के लिए वास्तव में कोई फायदा नहीं है, सिवाय इसके कि ग्रोवी प्रोग्रामर द्वारा छेड़छाड़ की जा रही है, जो " स्टाइल "अपने कोड को पढ़ने वाले अगले व्यक्ति की तुलना में। यदि आप जानना चाहते हैं कि आपकी ऑब्जेक्ट्स किस प्रकार हैं, तो वास्तविक प्रकार का उपयोग करें यदि यह कोई प्रश्न हो। यह आईडीई को और अधिक सहायक होने देता है (Ctrl-space समापन बहुत बेहतर काम करता है)।जैसे ही आप प्रगति करते हैं, फिर भी, आप कई बार डीफ़ के साथ अधिक सहज महसूस कर सकते हैं, इसलिए जब सही लगता है तो इसका उपयोग करें। आम तौर पर जेनेरिक भी काम करते हैं। –

उत्तर

13

यह एक आम शुरुआत का विलाप है। आप एक नामकरण सम्मेलन का उपयोग कर सकते हैं, लेकिन बाधाएं आप इसे बहुत लंबे समय से पहले छोड़ देंगे और पर ध्यान केंद्रित करेंके बारे में चिंता करने के बजाय वेरिएबल का प्रतिनिधित्व करता है (शेष कोड के संबंध में इसका अर्थ) यह दर्शाता है (यह है "प्रकार")।

+1

यह एक बहुत पुराना सवाल है, मुझे पता है, लेकिन मेरे लिए, मुझे दिलचस्पी नहीं है कि कैसे * एक चर को निर्धारित करने में सक्षम होने के रूप में प्रतिनिधित्व किया जा रहा है, नज़र में, इस पर कौन से ऑपरेशन उपलब्ध हैं। उदाहरण के लिए, अगर कोई ऐरे या सूची है तो मुझे परवाह नहीं है, लेकिन मुझे परवाह है कि मैं इसे फिर से कर सकता हूं या नहीं। इस मामले में एक सम्मेलन के बारे में क्या? जैसे "नामसूची" बनाम "नाम"? – ossek

2

यदि नामों को छोटा रखा जा सकता है, तो मैं नक्शे को "nounToNoun" जैसे कुछ नामों का नाम देता हूं। तो पूर्णांक में मैपिंग तिथियों के अपने उदाहरण का उपयोग करके, मैं उस "डेट टूकाउंट" का नाम दूंगा (यदि पूर्णांक कुछ के लिए काउंटर हैं)। इस तरह यह स्पष्ट है कि यह एक नक्शा है, और यह स्पष्ट है कि क्या मैप किया जा रहा है। समस्या यह है कि कभी-कभी इन प्रकार के नामों को छोटा और पठनीय रखना मुश्किल होता है। उदाहरण के लिए, "userToLoginHistory" थोड़ा अनावश्यक हो रहा है।

सूचियों के लिए मैं आमतौर पर परिवर्तनीय नाम के लिए एक बहुवचन का उपयोग करता हूं। तो "उपयोगकर्ता" एक एकल उपयोगकर्ता होगा, और "उपयोगकर्ता" उपयोगकर्ताओं की एक सूची होगी।

ईमानदार होने के लिए, मुझे यकीन नहीं है कि नक्शे की सूची के लिए एक अच्छा नाम क्या होगा।

7

आपके चर के नाम को कोड को पढ़ने वाले किसी व्यक्ति को समझा जाना चाहिए, जो इसके लिए है, यह क्या है। आप पूर्णांक के लिए तिथियों का एक नक्शा है, तो यह प्रतिनिधित्व करता है, उदाहरण के लिए (अनुशंसित वेरिएबल नामों कोष्ठक में हैं):

  1. उस तारीख को देय भुगतान (paymentsDue)
  2. के बीच दिनों की संख्या के एक नंबर मैप की तारीख और समय में कुछ अन्य बिंदु (daysPassed)
  3. संदेशों स्टैक ओवरफ़्लो पर उस तारीख पर पोस्ट की एक संख्या (numberOfPostedMessages)

भाषाओं जहां वैरिएबल प्रकार आसानी से उपलब्ध नहीं है, आप एक संलग्न करने के लिए चाहते हो सकता है उपसर्ग ओ एफ प्रत्यय, जैसे paymentsDueMap। हालांकि, मैं datesToInts जैसे परिवर्तनीय नाम के अंदर किसी भी अतिरिक्त प्रकार की जानकारी एन्कोडिंग के खिलाफ सलाह देता हूं - जो नियमित रूप से अच्छे से अधिक नुकसान करता है।

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

3

स्थिर भाषाओं में (जेनेरिक के साथ esp) में आपको हमेशा यह पता होता है कि आपका प्रकार क्या है।

गतिशील भाषाओं में प्रोग्रामिंग के कुछ समय बाद, आप सीखते हैं कि इस तरह के प्रकारों का उपयोग एक क्रैच है। सलाह के दो टुकड़े:

  1. अच्छे परिवर्तनीय नामकरण का उपयोग करें। उदाहरण के लिए, यदि आपके पास इनट्स की तिथियों का नक्शा है, तो आप इसे जन्मदिन जैसे ToTotalLookup नाम दे सकते हैं।
  2. जानें कि कौन से दृश्य सुराग देखना चाहते हैं। यह स्पष्ट लग सकता है, लेकिन यह मुझे कुछ समय लिया इस तरह सुराग की तलाश में करने की आदत में पाने के लिए:

    sum += x['10-16-92'] 
    

उपरोक्त कोड का टुकड़ा से, मुझे लगता है कि एक्स बता सकते हैं एक नक्शा है कि एक कुंजी के रूप में एक तारीख और कुछ प्रकार की वापसी करता है।

2

गतिशील भाषाओं के लाभों में से एक यह है कि भले ही आप किसी वस्तु का उपयोग मानचित्र के रूप में कर रहे हों - यह नक्शा नहीं होना चाहिए। इसे बस इतना करना है कि जो भी संदेश भेजे जाते हैं उसका समर्थन करें। ग्रोवी में, अगर मुझे पता है कि एक दी गई विधि एक मानचित्र की अपेक्षा करती है तो यह स्ट्रिंग कुंजी द्वारा चीजों को देख सकती है - मैं इसे पूरा नक्शा, एक छीनने वाला नक्शा दे सकता हूं, एक संपत्ति के साथ एक एक्सपोन्डो जो कुंजी के समान है , या कोई अन्य ऑब्जेक्ट जिसमें संपत्ति है, वही चीज है जो कुंजी के समान है। ऐसा इसलिए है क्योंकि कुछ ऑब्जेक्ट ["keyname"] और someObject.keyname एक ही चीज़ हैं। (बेशक अगर कोड someObject.get ("keyname") को कॉल करता है तो मुझे उस विधि को किसी भी तरह से तार करना होगा।)

बिंदु, एक गतिशील भाषा में ग्रोवी जैसे आप TYPES के बारे में कम सोचते हैं और समर्थित के बारे में अधिक सोचते हैं संदेश। यदि यह अवधारणात्मक रूप से एक नक्शा है, तो ठीक है - इसे जन्म देने का नामकरण करने का अर्थ समझ जाएगा (हालांकि मैं इसे 'योग' कहूंगा, क्योंकि कुल [जन्मतिथि] जन्मदिन से बेहतर दिखता है [जन्मदिन]) - लेकिन अगर इसे निर्दिष्ट नहीं किया जाना है, इसे निर्दिष्ट न करें। आप बाद में खुद को लचीलापन छोड़ दें।

2

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

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

जैसा कि आपको संदेह हो सकता है, इनमें से कोई भी आवश्यक नहीं है। एक गतिशील भाषा (और यहां तक ​​कि बहुरूपता के बिंदु) का बिंदु यह है कि आपको सटीक प्रकार के चर को प्रस्तुत करने की आवश्यकता नहीं है, केवल डेटा ही महत्वपूर्ण है। जबकि आपको उस डेटा को इंटरफ़ेस करने के तरीके के बारे में संकेत हो सकता है, आपको जल्द ही पता चलेगा कि आप ज्यादातर मामलों में पहले से ही जानते हैं, या आसानी से उस जानकारी को बिना किसी प्रकार के चर के रूप में रख सकते हैं: पते ByZipCode, totalByBirthdate, आदि