सिस्टम हंगरी की अपील क्या है? [बन्द है]


18

आप किन नामकरण दिशा-निर्देशों का पालन करते हैं? लेखक कहता है:

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

मैं कई प्रोग्रामर के लिए चला हूं जो अभी भी हंगेरियन का उपयोग करना पसंद करते हैं, ज्यादातर पेट्ज़ोल्ड / सिस्टम हंगेरियन स्वाद। सोचो dwLength = strlen(lpszName)

मैंने मेकिंग रोंग कोड लुक गलत पढ़ा है , और मैं एप्स हंगेरियन के लिए तर्क को समझता हूं, जहां चर नामों में डोमेन-प्रकार की जानकारी शामिल है। लेकिन मुझे नाम के लिए कंपाइलर टाइप अटैच करने का मूल्य समझ में नहीं आता है।

प्रोग्रामर अभी भी अंकन की इस शैली का उपयोग करने पर क्यों कायम हैं? क्या यह सिर्फ जड़ता है? वहाँ कोई लाभ है कि कम पठनीयता पल्ला झुकना है? क्या लोग कोड को पढ़ते समय केवल डेकोरेटर की उपेक्षा करना सीखते हैं, और यदि हां, तो वे मूल्य कैसे जोड़ना जारी रखते हैं?

EDIT: बहुत सारे उत्तर इतिहास की व्याख्या कर रहे हैं, या यह अब प्रासंगिक क्यों नहीं है, दोनों का उल्लेख मैंने लेख में किया है।

मैं वास्तव में किसी से सुनना चाहता हूं जो अभी भी इसका उपयोग करता है। आप इसका उपयोग क्यों करते हैं? क्या यह आपके मानक में है? यदि आवश्यक न हो तो क्या आप इसका उपयोग करेंगे? क्या आप इसे किसी नए प्रोजेक्ट पर उपयोग करेंगे? फायदे के रूप में आप क्या देखते हैं?


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

1
मैंने उस वर्ष का उपयोग किया और इसे कभी भी पसंद नहीं किया। मुझे यह बिल्कुल याद नहीं है।
18 मई को MetalMikester

imo के साथ सबसे बड़ी समस्या प्रत्ययों के बजाय उपसर्गों का उपयोग कर रही थी - यहां तक ​​कि क्षुधा में भी 'मस्सा' में आमतौर पर बाकी नाम की तुलना में कम अर्थ संबंधी जानकारी होती है
jk।

जवाबों:


38

फिलहाल मैं अभी भी तीन कारणों से हंगेरियन का उपयोग करता हूं , विवेकपूर्ण रूप से इसे बाकी चीजों के लिए टालना :

  1. रखरखाव करते समय एक मौजूदा कोड आधार के अनुरूप होना।
  2. नियंत्रण के लिए, उदाहरण के लिए। "TxtFirstName"। हमें अक्सर "प्रथम नाम" मान और "प्रथम नाम" नियंत्रण के बीच अंतर करने की आवश्यकता होती है। हंगरी ऐसा करने का एक सुविधाजनक तरीका प्रदान करता है। बेशक, मैं "firstNameTextBox" टाइप कर सकता हूं, लेकिन "txtFirstName" केवल समझना आसान है और कम वर्ण है। इसके अलावा, हंगेरियन का उपयोग करने का मतलब है कि एक ही प्रकार के नियंत्रण को ढूंढना आसान है, और अक्सर आईडीई में नाम से समूहीकृत होते हैं।
  3. जब दो चर समान मूल्य रखते हैं लेकिन प्रकार से भिन्न होते हैं। उदाहरण के लिए, वास्तव में उपयोगकर्ता द्वारा टाइप किए गए मूल्य के लिए "strValue" और पूर्णांक के रूप में पार्स किए जाने के बाद उसी मान के लिए "intValue"।

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


अपडेट करें:

मैंने अभी-अभी एरिक लिपर्ट का एक अपमानजनक लेख पढ़ा है , जिसमें बताया गया है कि हंगेरियन कैसे गलत कोड को गलत दिखने में मदद कर सकता है। अच्छी तरह से पढ़ने लायक।


बहुत बढ़िया जवाब, जुगनू पूछे गए सवाल का जवाब देता है।
एएसली

बस मेरे iphone के रचनात्मक संपादन पर ध्यान दिया ... gsub ('जुगनू', 'पूरी तरह');
21

5
IDE में UI नियंत्रणों को समूहीकृत करने के लिए अर्ध-हंगेरियन का उपयोग करने के लिए +1। यह एकमात्र उपयोग है जो अभी भी नई परियोजनाओं के लिए समझ में आता है, और मैं बस इसके बिना नहीं रह सकता। मैं अक्सर जानता हूं कि एक नियंत्रण एक टेक्स्टबॉक्स है, लेकिन यह नहीं जानते कि इसे "फर्स्टनाम" या सिर्फ "नाम" कहा जाता है।
कॉडी ग्रे

2
मैं इस जवाब से सहमत हूं। IntValue और strValue का उपयोग करने के बारे में, आप इसे valueAsInt और valueAsStr के रूप में भी देख सकते हैं, इसलिए मुझे नहीं पता कि क्या मैं इस AY नोटेशन पर विचार करता हूं, यह अधिक पसंद है कि int और str वैरिएबल नाम का हिस्सा हैं।
मिशेल केइजर्स

2
2 मुझे पूर्ण प्रत्यय पसंद हैं क्योंकि उपसर्ग बहुत मूर्खतापूर्ण मिल सकते हैं (क्या एक tssbया एक है tsddi? हां, वे मौजूद हैं)। संक्षिप्तताओं में भी एकरूपता की समस्या है, इसे लेकर TextBoxअसंगतता हो सकती है कि क्या यह है tbया txt(मैंने व्यक्तिगत रूप से एक एकल विंडो पर 'वरिष्ठ' देव उपयोग दोनों देखा है)। के लिए 3 मैं हंगेरी ड्रॉप जब चर अपने अंतिम इच्छित प्रकार तक पहुँच जाता है (उदाहरण के लिए मैं का प्रयोग करेंगे valueऔर strValueअपने उदाहरण में)।
जोनाथन डिकिंसन

6

मैं आयु अंकन का उपयोग करने का बहुत बड़ा प्रशंसक नहीं हूं, लेकिन इस तरह से सोचें:

  • हम यह भी नोटिस कर सकते हैं कि आपके कोड में एक टेक्स्टबॉक्स को संदर्भित करने के लिए यह एक स्ट्रिंग खोजने के लिए तेज़ है: अपने खोज बॉक्स में "txt" टाइप करके।

विपरीत की कल्पना नहीं, जहां हर तत्व का अपना नाम हो। आपके लिए यह जानना धीमा हो सकता है कि आप कहाँ जाना चाहते हैं, है ना?

जब हम एक DropDownList को संदर्भित करना चाहते हैं, तो वही ddl के लिए जाता है, यह आसान है या नहीं? :)

लोग इस तत्व को खोजने के लिए इतना समय खर्च नहीं करेंगे।

उपसर्ग का उपयोग C # जैसी आधुनिक भाषाओं के संकलक के लिए उपयोग करने योग्य नहीं है, लेकिन यह मानव के लिए प्रयोग करने योग्य (पठनीय) है


यह इसके व्यावहारिक मूल्य का सबसे अच्छा उदाहरण है जो मैंने सुना है। (लेकिन अभी भी मुझे इसे अपनाने के लिए पर्याप्त नहीं है :)
एशेल्ली

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

मैं वैरिएबल और (विशेष रूप से) विगेट्स के साथ भी ऐसा ही करूंगा - अक्सर उन्हें अपने प्रकार को निरूपित करने के लिए छोटे उपसर्ग देते हैं। लेकिन उन पर "फुल-आउट मैरी" जाने की बात तक नहीं।
ग्रैंडमास्टरबी

4

एप्स हंगेरियन (टैग्स जो वस्तुओं के शब्दार्थ गुणों को दर्शाते हैं जिन्हें टाइप सिस्टम के माध्यम से व्यक्त नहीं किया जा सकता है) 1980 के दशक की शुरुआत में कमजोर टाइप की भाषाओं का उपयोग करते समय कुछ सामान्य त्रुटियों से निपटने का एक उचित तरीका था। वे आज की दृढ़ता से टाइप की गई भाषाओं में बहुत कम उद्देश्य रखते हैं।

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

दोनों शैली Microsoft के भीतर उत्पन्न हुईं। इन दिनों, माइक्रोसॉफ्ट के नामकरण सम्मेलनों में स्पष्ट रूप से कहा गया है "हंगेरियन नोटेशन का उपयोग न करें।"


4

यदि आप उपसर्गों की सही प्रणाली के साथ आते हैं, तो आप अपनी कुंजी के पहनने और आंसू को फैला सकते हैं, जो प्रतिस्थापन कीबोर्ड पर खर्च को कम करेगा।


मुझे लगता है कि मैं इस पर विस्तार कर सकता हूं। मैंने अपने कार्य स्थल पर पिछले, ओह, दस वर्ष या तो (क्योंकि यह हमारे मानक में है) में SH का उपयोग किया है। इसने कभी किसी समस्या को हल करने में मदद नहीं की है।

दूसरी ओर, मैंने अपने 'होम कोड' में अनियंत्रित लेकिन अच्छी तरह से नामित चर का उपयोग किया है, लगभग समान रूप से लंबे समय तक। मैंने एसएच को कभी याद नहीं किया।

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

इसलिए, निष्कर्ष में, मैं केवल इतना ही अंतर देख सकता हूं कि आपके कीबोर्ड पर पहनने और आंसू हैं।


1
वहाँ व्यंग्य की तरह :)
JohnL

4

मैंने वास्तव में इस महीने में लिखे गए नए कोड में SH का उपयोग करना शुरू कर दिया था।

मेरे असाइनमेंट में JS में कुछ पर्ल कोड को फिर से लिखना था ताकि इसे हमारे वेब एप्लिकेशन के क्लाइंट साइड में ले जाया जा सके। पर्ल में, एसएच को आमतौर पर सिगिल ($ स्ट्रिंग, @ ऐरे,% हैश) की वजह से आवश्यकता नहीं होती है।

जावास्क्रिप्ट में, मैंने SH को डेटा संरचनाओं के प्रकारों को ट्रैक करने के लिए अमूल्य पाया। उदाहरण के लिए,

var oRowData = aoTableData[iRow];

यह पूर्णांक अनुक्रमणिका का उपयोग करके ऑब्जेक्ट की एक सरणी से एक वस्तु को पुनः प्राप्त करता है। इस अधिवेशन का पालन करने से मुझे डेटा के प्रकारों को देखने में कुछ समय की बचत हुई। साथ ही, आप रसीले चर नामों ( oRowबनाम iRow) को ओवरलोड कर सकते हैं ।

tl; dr: जब आप कमज़ोर टाइप की गई भाषा में जटिल कोड रखते हैं तो SH महान हो सकता है। लेकिन अगर आपका आईडीई प्रकार ट्रैक कर सकता है, तो उसे प्राथमिकता दें।


2

मैं औचित्य देखने के लिए उत्सुक हूं। हम जानते हैं कि उन्होंने अतीत में इसका उपयोग क्यों किया था: प्रकार की जानकारी के लिए आईडीई समर्थन की कमी। पर अब? सीधे शब्दों में, मुझे लगता है कि यह एक परंपरा है। C ++ कोड हमेशा इस तरह दिखता था, इसलिए चीजें क्यों बदलें? इसके अलावा, जब आप हंगेरियन नोटेशन का उपयोग करने वाले पिछले कोड के शीर्ष पर बनाते हैं, तो यह काफी अजीब लगेगा जब आप अचानक इसका उपयोग करना बंद कर देंगे ...


2
सी ++ कोड हमेशा ऐसा नहीं दिखता था - ब्रेज़न स्ट्रॉस्ट्रुप किताब की जांच करें।
JBRWilkinson

@JBRWilkinson: चार्ल्स सिमोनी ने 1976 के आसपास ( c2.com/cgi/wiki?H ट्वीट्सNotation ) हंगेरियन नोटेशन बनाया है । तो यह अंकन वास्तव में C ++ से पहले का है। कई नहीं तो सबसे सी + + प्रोग्रामर 1 दिन के बाद से इसका उपयोग कर रहे हैं (उनके कोडिंग का, वह है)। मैं समझता हूं कि ब्रेज़न स्ट्रॉस्ट्रुप उल्लेखनीय अपवाद है, लिनुस टॉर्वाल्ड्स, लेकिन यह तथ्यों को नहीं बदलता है।
पावेल डिडा

2
मुझे लगता है कि हंगेरियन हमेशा मुख्य रूप से एक Microsoft चीज थी। मैंने यह नहीं देखा कि यह यूनिक्स और यूनिक्स जैसे वातावरण में बहुत उपयोग किया जाता है।
डेविड थॉर्नले

2

सिस्टम हंगेरियन नोटेशन वास्तव में एक कॉक-अप का एक सा था, शब्द 'प्रकार' की गलतफहमी। सिस्टम डेवलपर ने अक्षर डोमेन प्रकार (पंक्ति इंडेक्स, कॉलम इंडेक्स, ...) के विपरीत संकलक प्रकार (शब्द, बाइट, स्ट्रिंग, ...) के रूप में इसे शाब्दिक रूप से लिया।

लेकिन मुझे लगता है कि हर डेवलपर कई चरणों की शैली से गुजरता है जो उस समय में एक महान विचार की तरह प्रतीत होता है (और उपसर्ग प्रकार एक नौसिखिए के लिए एक अच्छा विचार की तरह प्रतीत होता है) नुकसान में गिरने से पहले (बदलते प्रकार, नए, सार्थक उपसर्गों का निर्माण करता है) आदि)। इसलिए मुझे लगता है कि एक जड़ता है: डेवलपर्स से जो बेहतर नहीं होते हैं और महसूस करते हैं कि यह एक खराब विकल्प क्यों है, डेवलपर्स से कोडिंग मानकों के साथ अटक गया है जो अभ्यास का उपयोग करने वाले और उपयोग करने वाले लोगों से है <windows.h>। Microsoft के लिए उपसर्ग संकेतन से छुटकारा पाने के लिए बदलना बहुत महंगा होगा (जो कई स्थानों पर गलत है: WPARAM?)।


1
यहां तक ​​कि इच्छित उपयोग इष्टतम से कम है क्योंकि यह एक निजी प्रकार की प्रणाली बनाता है जिसके बारे में कंपाइलर को पता नहीं है, और इसलिए चेक टाइप नहीं कर सकता है।
लैरी कोलमैन

@ लॉरी: जबकि यह निश्चित रूप से सच है, ऐसे सॉफ़्टवेयर उपलब्ध हैं जो स्रोत कोड को पार्स कर सकते हैं और कोड की जांच एक मानक के अनुरूप कर सकते हैं। वे यह सुनिश्चित करने में सक्षम हो सकते हैं कि उपसर्ग अभिव्यक्ति में मेल खाते हैं।
Skizz

1
स्थैतिक टाइपिंग का उपयोग करते समय मेरा आदर्श यह है कि कंपाइलर प्रकारों का सेट डोमेन प्रकारों के सेट का सुपरसेट हो। फिर संकलक सब कुछ जांच सकता है, कोई ऐड-ऑन की आवश्यकता नहीं है।
लैरी कोलमैन

0

एक बात है कि लोग हंगरी से गायब हैं। हंगेरियन अंकन वास्तव में स्वत: पूर्ण के साथ महान काम करता है।

मान लें कि आपके पास एक चर है, और नाम intHeightOfMonster है।

कहते हैं कि आप चर का नाम भूल जाते हैं

यह हो सकता है ऊँचाईऑनमास्टर या मॉन्स्टरहाइट या मेजरमेंटस्टरहाइट

आप एक पत्र टाइप करने में सक्षम होना चाहते हैं और स्वत: पूर्ण होने के लिए आपको कुछ चर नाम सुझा सकते हैं।

यह जानते हुए कि heightOfMonster एक int है, आप सिर्फ i और वॉइला टाइप करते हैं।

समय बचाओ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.