2010-05-21 17 views
11

संभावित डुप्लिकेट:
Is a variable named i unacceptable?
What is an ideal variable naming convention for loop variables?int i बनाम int अनुक्रमणिका आदि कौन सा बेहतर है?

एक सी पृष्ठभूमि मैं हमेशा सामान्य पाश चर के लिए int i का उपयोग किया है से आ रहा है। बेशक बड़े घोंसले वाले लूप या अन्य जटिल चीजों में मैं एक वर्णनात्मक नाम का उपयोग कर सकता हूं लेकिन आप किसने देखा था?

int i; 
for(i=0;i<Controls.Count;i++){ 
    DoStuff(Controls[i]); 
} 

या

int index; 
for(index=0;index<Controls.Count;index++){ 
    DoStuff(Controls[index]); 
} 

चालू परियोजना मैं वहाँ पर काम कर रहा हूँ में इन शैलियों और सूचकांक के दोनों ndx द्वारा प्रतिस्थापित किया जा रहे हैं।

कौन सा बेहतर है? i वैरिएबल बहुत सामान्य है? अन्य सी शैली के नामों के बारे में भी क्या? i, j, k इन सभी को वास्तविक वर्णनात्मक चर द्वारा प्रतिस्थापित किया जाना चाहिए?

+3

क्या एनडीएक्स वास्तव में i या अनुक्रमणिका से अधिक वर्णनात्मक है? या यह टाइप करने के लिए वर्णों की संख्या पर सिर्फ एक समझौता था? ;) –

+0

मुझे लगता है कि 'इंड' 'ndx' से अधिक सरल है, भले ही यह केवल वर्णों की संख्या समान है। – Ponkadoodle

+0

@Tuzo मुझसे मत पूछो। एक आदमी एक डेल्फी प्रोग्रामर है तो शायद यह अधिक सामान्य है? मेरा मानना ​​है कि मैंने हालांकि 'idx' और' ndx' दोनों को देखा है। – Earlz

उत्तर

14

i, हालांकि, पहले लूप के मामले में j के बाद एक आंतरिक लूप और k के अंदर एक आंतरिक-आंतरिक लूप के लिए बहुत मानक है, और इसी तरह।

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

+0

मुझे "और इतने पर" बिट के बारे में पता नहीं है। चार स्तरों पर जाकर शायद डिजाइन की पुनर्विचार की गारंटी है। इसके अलावा, 'l' किसी भी संदर्भ में एक चर के लिए एक भयानक नाम है (एक प्रकार का प्राकृतिक बाधा :-)। –

+0

@ मार्सेलो: बेशक। मैं वास्तव में 'k' के साथ लूप शुरू करता हूं और 'm' और' n' पर जाता हूं, मुझे कभी चौथे की आवश्यकता नहीं होती है: पी –

+0

यदि आप मैट्रिक्स कॉलम प्रमुख हैं। रैखिक बीजगणित विश्व एम और एन में आयामों के लिए बहुत अधिक मानक हैं, चर चलाने के लिए नहीं (जो मैं, जे, के हैं) – Anycorn

8

जब संभव हो, तो मैं वर्णनात्मक नामों का पक्ष लेगा, क्योंकि हमें पठनीय कोड के लिए प्रयास करना चाहिए।

अस्थायी चर कि एक तंग कोड ब्लॉक में उपयोग किया जाता है के लिए, एक छोटी चर नाम स्वीकार्य है।

लेकिन अगर पाश या कोड ब्लॉक बहुत लंबा है, यह एक लंबे समय तक वर्णनात्मक चर नाम के लिए अगर कोई अन्य कारण से की तुलना में यह आसान के लिए कर रही पाठ खोज कर देगा बेहतर है।

+1

'i' एक मानक सूचकांक चर है जिसे किसी भी लूप संरचना में पहचानने योग्य होना चाहिए। – Jason

1

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

2

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

1

व्यक्तिगत तौर पर मैं i, j पाश चर के तथापि बजाय मैं कोशिश करते हैं और प्रत्येक के लिएका उपयोग जब भाषा यह अनुमति देता है के लिए करते हैं का उपयोग करें - मुझे लगता है कि और भी बेहतर हैं।

+0

हां, लेकिन यह दोनों सी और सी # और संभवतः रूबी – Earlz

+0

+1 में भी मेरे कोडिंग से संबंधित है .. अगर इंडेक्स की आवश्यकता नहीं है और भाषा संग्रह पुनरावृत्ति का समर्थन करती है, तो मैं इसे धीमा कर देता हूं, भले ही यह धीमा हो। – Anurag

5

आप बहु-आयामी सरणी तत्वों का उपयोग करने के नेस्टेड छोरों कर रहे हैं, वर्णनात्मक इटरेटर नाम आत्म टिप्पणी कोड बनाने के लिए आवश्यक हैं। उदाहरण के लिए,

for(int i=0;i<someMax;i++){ 
    for(int j=0;j<someOtherMax;j++){ 
    DoStuff(someArray[i,j]); 
    } 
} 

बनाम।

for(int row=0;row<someMax;row++){ 
    for(int column=0;column<someOtherMax;column++){ 
    DoStuff(someArray[row,column]); 
    } 
} 
+0

क्या आपका मतलब 'पंक्ति, कॉलम' जैसा है? – Earlz

+1

छद्म कोड आपके इच्छित किसी भी सम्मेलन का पालन करता है - इसे सिर्फ अल्पविराम में बदलना क्योंकि। – jball

+0

क्या होगा यदि आपके पास त्रि-आयामी सरणी या तीन नेस्टेड लूप हैं (मैट्रिक्स मैट्रिक्स गुणा करें)? मुझे लगता है कि मैं, जे, के वर्णनात्मक है क्योंकि आप – Anycorn

0

मैं एक साधारण कारण के लिए एक अक्षर चर नाम का उपयोग कभी नहीं - क्या तुमने कभी एक फ़ाइल में एक निश्चित चर की सभी घटनाओं के लिए खोज करने के लिए, या एक से अधिक फ़ाइलों में की कोशिश की? थोड़ा कम अस्पष्ट और अधिक खोजने योग्य कुछ का उपयोग करना बेहतर है।

+3

यदि आपके एकल-अक्षर पहचानकर्ता हमेशा कसकर दबाए जाते हैं, तो उन सभी घटनाओं की खोज करना व्यर्थ है। :) –

1

मैं अक्सर x और y उदाहरणों के लिए उपयोग जब मैं एक बिटमैप जैसे कुछ 2-आयामी वस्तु को पार्स कर रहा हूँ।

for (int (y = 0; y < height; y++) 
{ 
    for (int x = 0; x < width; x++) 
    { 
     // work 
    } 
} 
3

मैं काउंटर के रूप में एकल-अक्षर चर का उपयोग करता हूं। यहाँ कैसे मैं पाश, विस्तृत रूप से वर्णमाला में अक्षरों का उपयोग है:

for (int i = 0, l = array.length; i < l; i ++) { 
    for (int j = 0, m = array[i].length; j < m; j ++) { 
    for (int k = 0, n = array[i][j].length; k < n; k ++) { 
     for (int o = 0, p = array[i][j][k].length; o < p; o ++) { 
     for (int q = 0, r = array[i][j][k][o].length; q < r; q ++) { 
      for (int s = 0, t = array[i][j][k][o][q].length; s < t; s ++) { 
      for (int u = 0, v = array[i][j][k][o][q][s].length; u < v; u ++) { 
       for (int w = 0, x = array[i][j][k][o][q][s][u].length; w < x; w ++) { 
       for (int y = 0, z = array[i][j][k][o][q][s][u][w].length; y < z; y ++) { 
        f(array[i][j][k][o][q][s][u][w][y]); 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+8

भयानक +1 .. अब अगर वह 'सरणी [देश] [राज्य] [काउंटी] [शहर] [सड़क] [भवन] [घर] [निवासियों] [0] [नाम] ', मैं होता स्टंप किया गया होगा। – Anurag

+3

ओह मेरे भगवान डरावनी! – Earlz

+2

इस तथ्य का जिक्र नहीं है कि एल, एम, एन, पी, आर, टी, वी, और एक्स लूप वैरिएबल के रूप में चूसते हैं। – Anurag

4

लघु चर नाम महान हैं, लेकिन वे छोटे स्कोप होना चाहिए। और उन्हें भाषा के सम्मेलनों का सम्मान करना चाहिए। दिन मैं दिन तक, मेरी हास्केल और एमएल कोड समारोह-मान चर f, g, और h और monadic संगणना m, unnknown प्रकार a और b की चर, और सूचियों अज्ञात तत्व प्रकार as और bs का होगा। लेकिन इन चर के दायरे छोटे कार्यों या where खंडों तक ही सीमित होंगे।

मेरे सी कोड चर i बुलाया जाएगा, j, p, q, s, और t। लेकिन इन चर के दायरे अलग-अलग लूप तक सीमित होंगे (सभी प्रशंसा सी 99 और सी ++ बैकपोर्ट्स!) या लघु कार्य। चाहे वह लूप इंडेक्स या कोई अन्य चर हो, जो किसी बड़े दायरे में दिखाई देता है, वह लंबा नाम प्राप्त करता है।

+0

कोई 'आर' चर कैसे नहीं आती है? – Anycorn

3

किसी आइटम की दृश्यता का दायरा यह निर्धारित करना चाहिए कि को की आवश्यकता कितनी वर्णनात्मक है।

यदि आपके पास सचमुच एक छोटा लूप है, i, j, और k ठीक और ठेठ सूचकांक काउंटर हैं। कभी-कभी एक और वर्णनात्मक नाम रोशनी के इरादे में मदद कर सकता है, लेकिन यदि लूप के लिए निम्न की तरह स्थापित किया गया है, तो एक और वर्णनात्मक नाम वास्तव में कोई फर्क नहीं पड़ता।

for (int i = 0; i < totalCount; ++i) 
{ 
    Thing& myThing = things[i]; 

    // do stuff with myThing, never refer to i again 
} 

जिसके अनुसार, संक्षिप्त रूपों जब तक वे लगातार इस्तेमाल कर रहे हैं कभी नहीं किया जाना चाहिए। मुझे व्यक्तिगत रूप से लगता है कि ndx एक भयानक पहचानकर्ता है क्योंकि इसे टाइप करना मुश्किल है; मैं पूरी तरह से अंग्रेजी टाइप कर सकता हूं और मेरी प्रोग्रामिंग गति मेरी टाइपिंग गति से सीमित नहीं है। यदि आप index कहना चाहते हैं index कहें।

मुझे विश्वास है कि यह व्यावहारिक प्रोग्रामर है कि वे कहा था कि आप रूपों का उपयोग नहीं करना चाहिए क्योंकि तब लोग कभी पता नहीं चलेगा क्या संक्षिप्त नाम का उपयोग करने के था। मुझे पता है कि मुझे index नामक एक चीज़ चाहिए, इसलिए मैं index टाइप करता हूं लेकिन मुझे एक कंपाइलर त्रुटि मिलती है। अब क्या? (यह पता लगाने के लिए कोड के माध्यम से शिकार करें कि यह ndx मुझे परेशान करेगा।)

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

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

संबंधित मुद्दे