2008-09-25 15 views
17

जहां तक ​​परिवर्तनीय नामकरण सम्मेलन जाते हैं, क्या इटरेटर को i नाम दिया जाना चाहिए या count जैसे कुछ अर्थपूर्ण होना चाहिए? यदि आप i का उपयोग नहीं करते हैं, तो क्यों नहीं? अगर आपको लगता है कि i स्वीकार्य है, तो पुनरावृत्ति के मामले हैं जहां इसका उपयोग नहीं किया जाना चाहिए?एक चर है जिसे मैं अस्वीकार्य मानता हूं?

+6

केवल टीम परियोजनाओं में। क्योंकि टीम में कोई नहीं है! –

+0

पर एक नज़र डालें, जो इस प्रश्न को संबोधित करता है। –

उत्तर

35

मुझे लगता है कि संदर्भ पर निर्भर करता है। यदि आप संग्रह में ऑब्जेक्ट्स के एक सेट के माध्यम से लूपिंग करते हैं तो यह संदर्भ से स्पष्ट रूप से स्पष्ट होना चाहिए कि आप क्या कर रहे हैं।

for(int i = 0; i < 10; i++) 
{ 
    // i is well known here to be the index 
    objectCollection[i].SomeProperty = someValue; 
} 

हालांकि अगर यह संदर्भ से तुरंत स्पष्ट नहीं है, यह तुम क्या कर रहे है, या यदि आप सूचकांक में किए गए संशोधन कर रहे हैं आप एक चर के नाम का उपयोग के अधिक संकेत है का उपयोग करना चाहिए।

for(int currentRow = 0; currentRow < numRows; currentRow++) 
{ 
    for(int currentCol = 0; currentCol < numCols; currentCol++) 
    { 
     someTable[currentRow][currentCol] = someValue; 
    } 
} 
+0

मैं आईरो और आईकॉल का उपयोग करूंगा, लेकिन फिर मैंने फोरट्रान –

+0

फोरट्रान पर शुरू किया वैज्ञानिक अभी भी वैज्ञानिक कंप्यूटिंग के लिए कमाल है। लॉल, यदि आप अन्य भाषाओं का जिक्र करते हैं तो वैज्ञानिक वास्तव में आप पर हंसेंगे। – Josh

+0

खोज को उपयोगी बनाने के लिए किसी भी एकल वर्ण चर को डबल करें। ii v। i, xx v। x। – user7116

0

यह मदद करता है अगर आप इसे कुछ नाम दें जो वर्णन करता है कि यह किस प्रकार लूपिंग कर रहा है। लेकिन मैं आमतौर पर बस उपयोग करता हूं।

2

मैं निश्चित रूप से स्वीकार्य हूं। निश्चित नहीं है कि मुझे किस तरह का औचित्य बनाना है - लेकिन मैं इसे हर समय उपयोग करता हूं, और अन्य बहुत सम्मानित प्रोग्रामर भी करते हैं।

सामाजिक मान्यता, मुझे लगता है :)

2

हाँ, वास्तव में यह बाद से किसी भी प्रोग्रामर पढ़ने के लिए अपने कोड को समझ सकेंगे कि यह बस एक इटरेटर है को प्राथमिकता दी है।

0

जब तक आप या तो लूप गिनने के लिए या 0 (या पीएल के आधार पर 1) से निकलने वाली इंडेक्स का हिस्सा उपयोग करते हैं, तो मैं कहूंगा कि मैं ठीक हूं।

अन्यथा यह संभवतः नाम देने में आसान है, यह सिर्फ एक सूचकांक से अधिक है।

1

यदि "कुछ और अर्थपूर्ण" "पुनरावर्तक" है तो मुझे उपयोग करने का कोई कारण नहीं है; यह एक अच्छी तरह से समझदार मुहावरे है।

15

"i" का अर्थ है प्रोग्रामर को "लूप काउंटर"। इसके साथ कुछ भी गलत नहीं है।

5

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

वैसे, मुझे लगता है कि इनके लिए नामकरण सम्मेलन प्रारंभिक फोरट्रान भाषा से आया था जहां मैं पहला पूर्णांक चर (ए - एच फ्लोट था) था?

foreach (Product p in ProductList) 
{ 
    // Do something with p 
} 
+0

यह इतिहास के बारे में एक दिलचस्प छोटी सी बात है। धन्यवाद। – VirtuosiMedia

+1

जैसा कि वे कहते हैं, "भगवान असली है, जब तक कि पूर्णांक घोषित न किया जाए" –

6

यहाँ कुछ है कि पूरी तरह से ठीक है का एक और उदाहरण है। और आमतौर पर, आप एक सरणी पर लूपिंग कर रहे हैं। तो यह समझ में आता है।

+3

बिल्कुल। कोई भी शिकायत नहीं करता है कि गणितीय सबूत जो पढ़ते हैं, "निरंतर कार्य पर विचार करें, एफ" समझ में नहीं आता है क्योंकि फ़ंक्शन को "a_continuous_function" के बजाय "f" कहा जाता है। –

0

मैं कहना चाहिए कि मैं और जे भी कर रहे हैं मैट्रिक्स सूचकांक के लिए गणितीय संकेतन:

0

जब तक आप इसे अस्थायी रूप से एक साधारण पाश के अंदर उपयोग कर रहे हैं और यह स्पष्ट है कि आप क्या कर रहे हैं, सुनिश्चित करें। उस ने कहा, क्या कोई अन्य छोटा शब्द नहीं है जिसका आप उपयोग कर सकते हैं?

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

3

i कुछ के लिए स्वीकार्य है। हालांकि, मैंने सी ++ शिक्षक से एक सेमेस्टर की जबरदस्त राशि सीखी है, जिसने कोड को अस्वीकार कर दिया था जिसमें प्रत्येक एकल चर के लिए वर्णनात्मक नाम नहीं था। सबकुछ नाम देने का सरल कार्य ने मुझे अपने कोड के बारे में कड़ी मेहनत करने के लिए मजबूर कर दिया, और मैंने उस पाठ्यक्रम के बाद बेहतर कार्यक्रम लिखे, सी ++ सीखने से नहीं, बल्कि सबकुछ नाम देने से सीखने के लिए। कोड पूर्ण इस विषय पर कुछ अच्छे शब्द हैं।

2

अधिक विशिष्ट चर नाम के बजाय मैं उपयोग करने का क्या महत्व है? 1 सेकंड या 10 सेकंड या शायद, शायद 30 सेकंड सोच और टाइपिंग को बचाने के लिए?

मैं उपयोग करने की लागत क्या है? शायद कुछ भी नहीं। शायद कोड इतना आसान है कि मैं ठीक से उपयोग कर रहा हूँ। लेकिन शायद, शायद, मैं उन डेवलपर्स को मजबूर करूंगा जो भविष्य में इस कोड में आते हैं ताकि एक पल के बारे में सोचना पड़े "मेरा मतलब क्या है?" उन्हें सोचना होगा: "क्या यह एक सूचकांक है, एक गिनती है, ऑफसेट, ध्वज?" उन्हें सोचना होगा: "क्या यह परिवर्तन सुरक्षित है, क्या यह सही है, क्या मैं 1 से दूर रहूंगा?"

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

आम तौर पर, अधिकांश सॉफ्टवेयर विकास रखरखाव और विस्तार है, इसलिए आपके कोड को पढ़ने में व्यतीत समय की मात्रा इसे लिखने में कितने समय से अधिक होगी।

हर जगह सार्थक नामों का उपयोग करने की आदत विकसित करना बहुत आसान है, और एक बार जब आप आदत रखते हैं तो सार्थक नामों के साथ कोड लिखने में केवल कुछ सेकंड लगते हैं, लेकिन फिर आपके पास कोड पढ़ने के लिए आसान है, जो आसान है समझें, और अधिक स्पष्ट रूप से सही।

2

मैं छोटे लूप के लिए उपयोग करता हूं।

कारण यह ठीक है कि मुझे यह पूरी तरह से असंभव लगता है कि कोई प्रारंभकर्ता के साथ पुनरावर्तक प्रकार की घोषणा देख सकता है, और उसके बाद तीन पंक्तियों का दावा है कि यह स्पष्ट नहीं है कि चर क्या दर्शाता है। वे सिर्फ नाटक कर रहे हैं, क्योंकि उन्होंने फैसला किया है कि "सार्थक परिवर्तनीय नाम" का अर्थ "लंबे परिवर्तनीय नाम" होना चाहिए।

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

मैं मैं का उपयोग नहीं करते:

  • पाश शरीर या छोटे नहीं है,
  • इटरेटर के समाप्त करने के लिए एक श्रृंखला के शुरू से ही अग्रिम (या पीछे हटना) के अलावा और कुछ नहीं करता है लूप:

मुझे अनिवार्य रूप से 1 की वृद्धि में जाना आवश्यक नहीं है क्योंकि वृद्धि लगातार और स्पष्ट है, और निश्चित रूप से Iterand के अंत से पहले बंद हो सकता है, लेकिन यदि यह कभी दिशा बदलता है, या लूप के पुनरावृत्ति द्वारा अनमोडिफाइड है (इसमें तीर का शैतानी उपयोग शामिल है ator।आगे फॉरवर्ड में डालें()), मैं कुछ अलग उपयोग करने के लिए याद रखने की कोशिश करता हूं। यह संकेत "यह सिर्फ एक छोटा पाश चर नहीं है, इसलिए यह एक छोटा पाश नहीं हो सकता है"।

0

यह निर्भर करता है। यदि आप डेटा के कुछ विशेष सेट पर पुनरावृत्ति कर रहे हैं तो मुझे लगता है कि यह एक वर्णनात्मक नाम का उपयोग करने के लिए और अधिक समझ में आता है। (उदाहरण के लिए filecounter दान के रूप में सुझाव दिया)।

हालांकि, यदि आप मनमाने ढंग से लूप कर रहे हैं तो i स्वीकार्य है। के रूप में एक काम दोस्त मेरे लिए यह वर्णित है - i एक सम्मेलन का मतलब है कि है। "इस चर ही कभी for पाश निर्माण के द्वारा संशोधित किया जाता है कि सच नहीं है, का उपयोग नहीं करते i"

0

मैं का उपयोग, जे, INTEGER पाश काउंटर के लिए फॉरट्रान के प्रारंभिक दिनों में वापस चला जाता है।
व्यक्तिगत रूप से मुझे उनके साथ कोई समस्या नहीं है जब तक कि वे इंटेगर गणना करते हैं।
लेकिन फिर मैं फोरट्रान पर बड़ा हुआ!

3

मैं ठीक है, लेकिन कुछ इस तरह नहीं है: प्रोग्रामर अनजाने मैं और कोड में जे स्वैप करने के लिए के लिए, खासकर अगर वे बुरा दृष्टि या उनके Windows विषय है

for (int i = 0; i < 10; i++) 
{ 
    for (int j = 0; j < 10; j++) 
    { 
     string s = datarow[i][j].ToString(); // or worse 
    } 
} 

बहुत ही सामान्य "हॉटडॉग" है। यह हमेशा मेरे लिए "कोड गंध" होता है - यह दुर्लभ होता है जब यह खराब नहीं होता है।

+0

के बारे में mat_geek से सहमत हैं, मैंने कभी भी क्यों नहीं सोचा, लेकिन मैं मैट्रिस में इंडेक्स के लिए जे और के का उपयोग करता हूं, लेकिन मुझे लगता है कि यदि आप की दृष्टि खराब है तो मुझे और जे भ्रमित करना संभव है। – Cercerilla

3

मैं इतना आम है कि यह स्वीकार्य है, यहां तक ​​कि उन लोगों के लिए भी जो वर्णनात्मक चर नाम पसंद करते हैं।

पूरी तरह से अस्वीकार्य (और मेरी पुस्तक में एक पाप) किसी भी अन्य संदर्भ में i, j, या k का उपयोग किसी लूप में पूर्णांक अनुक्रमणिका के रूप में कर रहा है .... उदा।

foreach(Input i in inputs) 
{ 
    Process(i); 

} 
1

मुझे लगता है कि मैं फॉर-लूप परिस्थितियों में पूरी तरह स्वीकार्य हूं। मुझे यह हमेशा सुंदर मानक माना जाता है और जब मैं इस उदाहरण में उपयोग किया जाता है तो वास्तव में कभी भी व्याख्या मुद्दों में नहीं चलता है। foreach-loops थोड़ा trickier मिलता है और मुझे लगता है कि वास्तव में आपकी स्थिति पर निर्भर करता है। मैं शायद ही कभी फोरच में उपयोग करता हूं, केवल लूप के लिए, क्योंकि मुझे लगता है कि मैं इन मामलों में बहुत ही वर्णनात्मक हूं। पूर्वानुमान के लिए मैं ऑब्जेक्ट प्रकार के संक्षिप्त नाम का उपयोग करने का प्रयास करता हूं। उदाहरण:

foreach(DataRow dr in datatable.Rows) 
{ 
    //do stuff to/with datarow dr here 
} 

वैसे भी, बस मेरे $ 0.02।

0

मेरी भावना यह है कि अवधारणा एक ही अक्षर का उपयोग करने के लिए "सरल" लूप के लिए ठीक है, हालांकि, मैंने बहुत समय पहले डबल-अक्षरों का उपयोग करना सीखा और यह बहुत अच्छा काम कर चुका है।

मैं एक similar question पिछले सप्ताह कहा और निम्नलिखित my own answer का हिस्सा है:

// recommended style    ● // "typical" single-letter style 
            ● 
for (ii=0; ii<10; ++ii) {   ● for (i=0; i<10; ++i) { 
    for (jj=0; jj<10; ++jj) {  ●  for (j=0; j<10; ++j) { 
     mm[ii][jj] = ii * jj;  ●    m[i][j] = i * j; 
    }        ●  } 
}         ● }
मामले में लाभ तुरंत स्पष्ट नहीं है: किसी एक पत्र के लिए कोड के माध्यम से खोज बहुत सी बातें हैं कि नहीं क्या आप 'मिलेगा फिर से देख रहे हैं पत्र i अक्सर कोड में होता है जहां यह वह चर नहीं है जिसे आप ढूंढ रहे हैं।

मैं इसे कम से कम 10 वर्षों तक कर रहा हूं।

टिप्पणी बहुत से लोगों को टिप्पणी की है कि है कि या तो/ऊपर के दोनों "बदसूरत" रहे हैं ...

+1

और संपादकों वाले लोगों के लिए जो शब्द ब्रेक पर पूरी तरह व्यर्थ हो सकते हैं। –

+0

ऑफटॉपिक थोड़ा: आप कथन के लिए लूप वैरिएबल को क्यों पूर्ववत करते हैं? मैं आमतौर पर preincrement के बजाय ** POSTINCREMENT ** देखता हूं। –

+0

दक्षता। यह सी भाषा के साथ अपने शुरुआती अनुभव से आता है जब असेंबली अनुकूलक सही नहीं थे। यदि आप वृद्धि के बाद, अभिव्यक्तियों का पहले मूल्यांकन किया जाता है, फिर वृद्धि की जाती है, फिर मूल्यांकन किया जाता है। यदि आप पूर्व-वृद्धि करते हैं, तो कोई प्रारंभिक मूल्यांकन नहीं होता है, फिर मूल्यांकन किया जाता है। –

-1

मैं अनाज के खिलाफ जाने के लिए और कोई कहने के लिए जा रहा हूँ।

भीड़ के लिए जो कहता है, "मुझे एक पुनरावर्तक के रूप में समझा जाता है", यह सच हो सकता है, लेकिन मेरे लिए यह है कि 'वैरिएबल वाई के लिए वैल्यू 5 असाइन करें' जैसे टिप्पणियों के बराबर है। टिप्पणी जैसे परिवर्तनीय नामों को क्यों समझा जाना चाहिए/कैसे नहीं।

पिछले एक जवाब से एक उदाहरण का उपयोग करें:

for(int i = 0; i < 10; i++) 
{ 
    // i is well known here to be the index 
    objectCollection[i].SomeProperty = someValue; 
} 

यह है कि बहुत कठिन है सिर्फ इसलिए की तरह एक सार्थक नाम उपयोग कैसे करें?

for(int objectCollectionIndex = 0; objectCollectionIndex < 10; objectCollectionIndex ++) 
{ 
    objectCollection[objectCollectionIndex].SomeProperty = someValue; 
} 

(उधार) परिवर्तनीय नाम ऑब्जेक्ट को स्वीकार किया गया चयन भी बहुत बुरी तरह नामित है।