क्या एक-अक्षर वाले चर का उपयोग प्रोत्साहित किया जाता है? [बन्द है]


13

क्या जावा में एक-अक्षर वाले चर का उपयोग प्रोत्साहित किया जाता है? कोड स्निपेट या ट्यूटोरियल में, आप अक्सर उन्हें देखते हैं। मैं उनका उपयोग करने की कल्पना नहीं कर सकता क्योंकि यह कोड को पढ़ने के लिए अपेक्षाकृत कठिन बना देता है और मैं कभी भी उन्हें अन्य प्रोग्रामिंग भाषाओं में उपयोग नहीं करता!


3
हां और ना। पूरी तरह से स्थिति पर निर्भर करता है।
Zavior




1
हमेशा पढ़ने के लिए कोड को कठिन नहीं बनाता है। उदाहरण के लिए, जब आप गणितीय समीकरणों के आधार पर कोड लागू कर रहे होते हैं, तो यह आमतौर पर समान चर नामों का उपयोग करने के लिए समझ में आता है जो समीकरणों में उपयोग किए जाते हैं। (टिप्पणियाँ कागज / पाठ पर वापस
लौटती

जवाबों:


32

उचित रूप से नामकरण कठिन है। बहुत मुश्किल। यदि आप इसे दूसरे तरीके से देखते हैं, तो आप इसका मतलब यह भी निकाल सकते हैं कि ठीक से नामित चीजें महत्वपूर्ण हैं। (अन्यथा, आपने नामकरण के प्रयास में खर्च क्यों किया होगा?)

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

ऐसे कई उदाहरण हैं, जहाँ एकल अक्षर (या बहुत कम) चर नाम उपयुक्त हैं:

  • i, j, k, lपाश सूचकांक के लिए
  • kऔर vएक नक्शे में कुंजी और मूल्य के लिए
  • nएक संख्या के लिए (उदाहरण के लिए Math.abs(n))
  • a, b, cमनमाने ढंग से वस्तुओं के लिए (जैसे में max(a, b))
  • eएक सामान्य for eachलूप में तत्व के लिए
  • f एक उच्च-क्रम फ़ंक्शन में फ़ंक्शन के लिए
  • p एक फिल्टर में विधेय समारोह के लिए
  • T, T1, T2, ... प्रकार चर के लिए
  • E संग्रह के तत्व प्रकार का प्रतिनिधित्व करने वाले प्रकारों के लिए
  • R फ़ंक्शन के परिणाम प्रकार का प्रतिनिधित्व करने वाले एक प्रकार के चर के लिए
  • exएक catchखंड में अपवाद के लिए
  • op एक नक्शे या गुना में ऑपरेशन के लिए
  • sबहुवचन को इंगित करने के लिए पत्र को जोड़ना , अर्थात एक संग्रह (जैसे nsसंख्याओं के संग्रह के लिए , xsऔर ysसामान्य वस्तुओं के दो मनमाने संग्रह के लिए)

मैं उन्हें कभी भी अन्य प्रोग्रामिंग भाषाओं में उपयोग नहीं करते देखता हूँ!

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


5
-1 अक्षर वाले नामों का उपयोग करना आलसी प्रोग्रामिंग है। कभी-कभी आलसी होना ठीक है, लेकिन अगर आप लूप इंडेक्स में kऔर ऊपर उठ रहे हैं l, तो यह बहुत दूर है (आपको ऐसा नहीं करना चाहिए कि कई नेस्टेड लूप शुरू करने के लिए हैं; उन्हें कार्यों के लिए निकालें) । व्यक्तिगत रूप से, मैं कभी भी फंक्शन प्रति 1-अक्षर से अधिक का उपयोग नहीं करता हूं, लेकिन मैं 0. के लिए शूट करता हूं
ब्लूराजा - डैनी पीफ्लुगुफ्ट

इसके अलावा, lया lenएक लंबाई के लिए और arrएक सरणी के लिए उपयोग किया जाता है (जैसे:) for(var i=0; l=arr.length; i<l; i++)। इसके अलावा, fnके बजाय इस्तेमाल किया जा सकता fहै, जब आप एक समारोह का संदर्भ लें।
इस्माईल मिगुएल

4
@ BlueRaja-DannyPflughoeft मैं इसे कुशल प्रोग्रामिंग के रूप में सोचना पसंद करता हूं। Jorg शायद तब विस्तार कर सकता है जब एकल पत्र उपयुक्त हों, न कि केवल जहां, लेकिन ईमानदार होने के लिए मुझे लगता है कि अधिकांश प्रोग्रामर लाइन को अलग तरह से आकर्षित करते हैं। लूप सूचकांकों के लिए, मैं तर्क दे सकता हूं कि किसी भी कोड जहां सूचकांक को शब्दार्थिक मूल्य के साथ नामों की आवश्यकता नहीं है, अनावश्यक निष्कर्षण पर बहु-स्तरीय घोंसले के औचित्य के लिए पर्याप्त सरल है। वे अलग-अलग छोरों में भी इस्तेमाल किया जा सकता है ताकि नेल्सन संभावित स्कूपिंग मुद्दों से बच सकें ।
लिलिएनथाल

2
@ लिलिंथल: कोड कुशल-से-पढ़ा जाना चाहिए, न कि कुशल-से-लिखने वाला। आमतौर पर वे एक ही चीज हैं, लेकिन हमेशा नहीं, जैसा कि इस मामले में है।
ब्लूराजा - डैनी पफ्लुगुएट

@ BlueRaja-DannyPflughoeft सभी कार्यक्रमों में नहीं, लेकिन मैं जोर्ग के सुझावों के साथ कुछ भी गलत नहीं देखता। जैसा कि किलियन ने कहा था: "कुछ भी अब शब्दार्थ को और अधिक स्पष्ट नहीं कर सकता है, लेकिन पढ़ने में अधिक समय लगता है।" लेकिन यह शायद काफी हद तक व्यक्तिगत पसंद और शैली का मामला है।
लिलिएनथाल

20

यदि आपका लूप कुछ नहीं करता है लेकिन गिनती के लिए एक चर का उपयोग करें

  for(int i = 0; i < 10; i++) {
     System.out.println("Stop it! I really mean it!!");
  }

तो हाँ, यह सबसे अच्छा नाम है जिसका आप उपयोग कर सकते हैं। कुछ भी अब शब्दार्थ को और अधिक स्पष्ट नहीं कर सकता है, लेकिन पढ़ने में अधिक समय लगता है।

यदि चर का उपयोग लूप के अंदर किया जाता है , तो एक सार्थक नाम उपयोगी हो सकता है।

for(int door = 0; door < 3; door++) {
  int reward = gauge(door);
  if(reward > max) {
    max = reward;
    best = door;
  }
}

यदि आपके चर का उपयोग विधि-व्यापी है, तो इसका नाम लंबा होना चाहिए; यदि यह वर्ग-व्यापी उपयोग किया जाता है, तो इसका नाम पूरी तरह से स्व-व्याख्यात्मक था, अन्यथा यह आपके कोड की स्पष्टता को लगभग कम कर देगा।

संक्षेप में, चर का दायरा जितना बड़ा होगा, उसका नाम उतना ही लंबा होगा।


ईमानदारी से, मैं उस बिंदु पर पहुंच गया हूं जहां मैं एक वर्ण चर नाम, अवधि का उपयोग नहीं करूंगा। मैं उन नामों का उपयोग करने का प्रयास करता हूं जो काउंटर से बाहर भी उपयोग के लिए जादू करते हैं। मैं आमतौर indexपर एक सरणी पर उदाहरण के लिए पुनरावृत्ति करते समय नामित चर का उपयोग करूंगा ।
माइकल

13
@ मिचेल: मेरी राय में, शब्दजाल की प्रोग्रामिंग अपनी भाषा है, यह अंग्रेजी उचित नहीं है। और उस भाषा में, iएक ठीक से परिभाषित अर्थ के साथ एक उचित शब्द है, जिसका नाम है "सूचकांक आपको बहुत चिंता करने की आवश्यकता नहीं है"। लेकिन मुझे लगता है कि यह परिचित का मामला है। आप हास्केल का एक बहुत पढ़ा, तो आप को पढ़ने के लिए आदी हो जाएगा mके रूप में इकाई , fके रूप में functor , xके रूप में किसी वस्तु , xsके रूप में की एक सूची xरों और इतने पर।
जोर्ग डब्ल्यू मित्तग

2
बस एक बहुत बड़ा चेतावनी है। एकल अक्षर चर नाम केवल तभी ठीक होते हैं जब भाषा में उचित परिवर्तनशील स्कूपिंग हो। आप स्पष्ट रूप से पूछेंगे कि 'किस भाषा में उचित ढलान नहीं है?' खैर, मुझे यह जानने में तीन घंटे लगे कि जावास्क्रिप्ट एक लूप में वेरिएबल्स की गुंजाइश नहीं है। समान चर नाम का उपयोग करके लूप के लिए लूप के अंदर से इसे आज़माएं। यह आपके दिमाग को उड़ा देगा।
नेल्सन

@ नेल्सन: यह प्रश्न, और यह उत्तर, जावा के बारे में है। जाहिर है विभिन्न भाषाओं में कुछ अलग विचार हो सकते हैं। (जावास्क्रिप्ट जावा के समान भाषा नहीं है।)
बर्बाद करें

जब भी वे सबसे अधिक समझ में आते हैं, तो मैं एकल-पत्र चर नामों के लिए सभी हूं, लेकिन मैं इस बात से सहमत नहीं हूं कि iएक लूप के लिए "सबसे अच्छा नाम जिसका आप उपयोग कर सकते हैं" केवल गिनती के लिए एक चर का उपयोग करता है। उस स्थिति में, मैं countइसका उपयोग चर नाम के रूप में करना चाहूंगा : तुरंत समझने योग्य। for (int count = 0; count < 10; count++)या while (count--)
टॉड लेहमैन

4

Kilian के उत्तर में कोड को पढ़ते हुए, मुझे नहीं लगता कि "कोई लूप है, और एक वैरिएबल है, और इसका प्रकार int है, और इसका एक नाम है, और नाम i है, और इसे 0 से प्रारंभ किया गया है।" .. "। मुझे लगता है कि "पाश ..." जहां तीन बिंदु महत्वहीन विवरण के लिए खड़े होते हैं, जिनके बारे में मैं भी नहीं सोचता। मेरे प्रोग्रामर के दिमाग में, वह वेरिएबल वास्तव में मौजूद नहीं है, यह सिर्फ एक कला है जिसे मुझे टाइप करना है, जैसे (;;) {} जो इसे लूप बनाता है।

चूँकि वह चर मेरे दिमाग में भी मौजूद नहीं है, मैं इसे एक नाम क्यों दूंगा, इससे परे जो बिल्कुल जरूरी है?


मुझे उस तरह के निर्माण में जोड़ना चाहिए, मुझे अक्सर उपयोग नहीं करने के लिए भी लुभाया जाता है i, लेकिन _स्पष्ट रूप से अर्थहीन चर के लिए। लेकिन हर कोई प्रोलॉग से परिचित नहीं है, और यह शायद इसे हटाने की तुलना में अधिक ध्यान देगा।
काइलिन फोथ

आपको यह भी विचार करने की आवश्यकता है कि चर का उपयोग लूप के अंदर कैसे किया जाता है , न कि केवल for (...)हेडर में।

@ केलियनफोथ: यह हास्केल, एमएल, एफ # और स्काला में भी उस तरह से उपयोग किया जाता है, मुझे विश्वास है। और रूबी में, भले ही _किसी भी अन्य की तरह एक कानूनी पहचानकर्ता है, हाल ही में एक परिवर्तन हुआ था जिसका उपयोग नहीं किया गया स्थानीय चर नाम दिया _(या शुरू _) एक "अप्रयुक्त स्थानीय चर" चेतावनी उत्पन्न नहीं करता है, भले ही रूबी आम तौर पर उनके बारे में चेतावनी देती है।
जोर्ज डब्ल्यू मित्तग

-1

यदि आप i, j, k अक्षरों को एक लूप के भीतर सूचक के रूप में संदर्भित कर रहे हैं, तो यह जावा और अन्य प्रोग्रामिंग भाषाओं में एक आम बात है। हालांकि इसके प्रत्येक शैली पाश के लिए उपयोग करने के लिए शायद बेहतर है, जैसे कि

for(User user: users) {
  doSomethingWithTheUser(user);
}

के बजाय

for(int i=0; i<users.size(); i++) {
  doSomethingWithTheUser(users.get(i));
}

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

कुछ अन्य मामले हैं जहाँ एकल अक्षर उपयुक्त हो सकते हैं, जैसे कि गणितीय कार्य को लागू करते समय जहाँ एकल अक्षर जैसे n, x, या y, पहले से ही सामान्य हो सकते हैं। लेकिन सामान्य तौर पर, नहीं, अपने चर को कुछ सार्थक नाम दें।


5
"जावा में लूपिंग की शैली केवल हाल ही में शुरू की गई थी" ... जैसा कि एक दशक पहले था? ( जावा 5 को 2004 में जारी किया गया था )
मेरिटॉन

1
हाँ, वह हाल ही में हुआ है। नहीं, मैं बूढ़ा नहीं हूं। चुप रहो। धिक्कार है बच्चों मेरे लॉन से। पूर्व जावा 5 से अभी भी बहुत सारी विरासत जावा अनुप्रयोगों में हैं। और भी जावा प्रोग्रामर जिन्होंने जावा 1.4 पर भाषा सीखी और वे कैसे काम करते हैं इसे अपडेट करने से इंकार करते हैं। और फिर भी 2000 के दशक की शुरुआत में और अधिक कोड नमूने ऑनलाइन हैं (हाँ, हमारे पास इंटरनेट वापस था, तब हमने इसे वेब 2.0 कहा था)।
निक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.