हम में से अधिकांश लूप काउंटर वेरिएबल के रूप में 'i' का उपयोग क्यों करते हैं?


126

क्या किसी ने इस बारे में सोचा है कि हम में से कई एक ही चर नामों का उपयोग करके इसी पैटर्न को क्यों दोहराते हैं?

for (int i = 0; i < foo; i++) {
    // ...
}

यह सबसे कोड मैंने कभी का उपयोग करता है देखा है लगता है i, j, kऔर इतने पर यात्रा चर के रूप में।

मुझे लगता है कि मैंने उसे कहीं से उठाया है, लेकिन मुझे आश्चर्य है कि सॉफ्टवेयर विकास में यह क्यों प्रचलित है। क्या यह कुछ है जिसे हम C से उठाते हैं या ऐसा कुछ?

बस एक खुजली मैं अपने सिर के पीछे थोड़ी देर के लिए पड़ा है।


4
पहले से ही एसओ पर एक लूओन्ग समय पहले पूछा; शायद उन लोगों को यहां माइग्रेट किया जाना चाहिए: stackoverflow.com/questions/454303/… और stackoverflow.com/questions/4137785/…
BlueRaja - Danny Pflughoeft

8
इसका एक डुप्लिकेट प्रश्न और मुझे यह उत्तर पसंद है। नाम के कारण डी ijk पट्टा
विवार्ट

2
मैं हमेशा सोचा था कि i, j और कश्मीर से डी से लिया गया है IJK रणनीति
ईसाई Kjaer

1
BTW: मैं हमेशा ii(और jj, kk...) का उपयोग करता हूं ताकि खोज करते समय पता लगाना आसान हो।
सबुनकु

1
आप और क्या उपयोग करेंगे?
थोरबजोर्न रेवन एंडरसन

जवाबों:


205

iऔर jआमतौर पर काफी समय के लिए गणित के एक बिट में सदस्यता के रूप में इस्तेमाल किया गया है (उदाहरण के लिए, यहां तक ​​कि उच्च-स्तरीय भाषाओं की भविष्यवाणी करने वाले कागजात में, आप अक्सर "एक्स आई, जे " जैसी चीजों को देखते हैं , खासकर एक समन की तरह चीजों में)।

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

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

for (int outer_index_variable=0; outer_index_variable < 10; outer_index_variable++)
    for (int inner_index_variable=0; inner_index_variable < 10; inner_index_variable++)
        x[outer_index_variable][inner_index_variable] = 0;

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


13
+1 मैंने यहां गणित सहसंबंध के बारे में नहीं सोचा था। यह एक दिलचस्प अहसास था।
केसी पैटन

79
साइकोसिस के लिए +1 करने की शैली के लिए कुछ कल्पना करते हैं।
क्रैश

2
ठीक है - तो मैं और जे गणित में सदस्यता के रूप में क्यों उपयोग किए जाते हैं? मुझे लगता है कि यह प्रयोग FORTRAN :-) मुझे यकीन है कि
नूथ

34
@Guy 'i' इंडेक्स के लिए है, j i के बाद का अगला अक्षर है
मार्टिन बेकेट

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

64

i - सूचकांक।

एक अस्थायी चर जिसका उपयोग लूप पुनरावृत्ति को अनुक्रमित करने के लिए किया जाता है। आप पहले से ही एक है, तो i, क्या करने जा रहा से भी अधिक स्वाभाविक है j, kऔर इसके आगे?

उस संदर्भ idxमें अक्सर उपयोग किया जाता है।

लघु, सरल, और दिखाता है कि चर का उपयोग क्या है, जैसा कि चर नाम होना चाहिए।


35
ijk = "मैं केवल मजाक कर रहा हूं"। :-)
महमूद होसम

2
क्या आप एक संदर्भ का हवाला दे सकते हैं?
लुई राइस

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

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

3
विचार की अपनी ट्रेन में iपुनरावृत्ति का मतलब भी हो सकता है।
टोटमेडली

39

FORTRAN iमें पूर्णांक प्रकार को डिफ़ॉल्ट करने वाला पहला पत्र था। निहित पूर्णांक प्रकारों की पूरी श्रृंखला किसी भी अक्षर iसे शुरू होती थी n। तीन आयामों के लिए छोरों के साथ कार्य करना हमें मिल गया i, jऔर k। अतिरिक्त आयामों के लिए पैटर्न जारी रहा। इसी तरह, 'x', 'y', और 'z' जो फ्लोटिंग पॉइंट के रूप में डिफॉल्ट हुए जहां लूप वेरिएबल्स के लिए उपयोग किया जाता है जिन्हें वास्तविक संख्या की आवश्यकता होती है।

litleadvनोट्स के रूप में , iसूचकांक के लिए एक न्यूनतम संकुचन भी है।

इन चरों के स्थानीय उपयोग को देखते हुए, मुझे अधिक वर्णनात्मक नाम का उपयोग न करने में कोई समस्या नहीं दिखती है।


एकल छोरों के लिए मैं सहमत हूं, लेकिन छोरों वाले छोरों के लिए मुझे थोड़ा अधिक विवरण पसंद है।
एडवर्ड स्ट्रेंज

1
अंततः उत्तर जड़ता है । मैंने इसे 1973 में वाटफ़ोर (वाटरलू फोरट्रान) के साथ करना शुरू किया और ... मैं अभी भी इसे 2011 में कर रहा हूँ।
पीटर रोवेल

1
@ क्रेजी एडी: यदि लूप में बहुत अधिक कार्यक्षमता है, तो मैं सहमत हूं। लेकिन कसकर नेस्टेड छोरों के साथ, कोड की लंबाई n + 1 या 2n + 1 के क्रम पर होनी चाहिए जहां n आयामों की संख्या है। उस स्थिति में लंबे चर नाम पठनीयता में कमी कर सकते हैं।
बिलटोर

11
+1 के लिए "फोरट्रान में" क्योंकि यही वह परंपरा शुरू हुई है - इससे कोई फर्क नहीं पड़ता कि आपको फोरट्रान पसंद है या नहीं।
आर्टेम

34

मेरा मानना ​​है कि यह संक्षेप से आता है :

योग


3
दिलचस्प! यह फोरट्रान की भविष्यवाणी करता है, लेकिन सीएस के संदर्भ में?
kprobst

3
चूंकि बैकस के पास गणित में परास्नातक था, इसलिए यह तर्कसंगत लगता है।
dbasnett

9
अधिकांश प्रारंभिक सीएस जीन या तो गणित या इलेक्ट्रिकल इंजीनियरिंग में थे, जिन्हें व्यापक गणित की आवश्यकता थी। आज भी, आपके औसत "कंप्यूटर nerd" में आमतौर पर औसत गणित कौशल होता है, क्योंकि गणित और कंप्यूटर इतने तार्किक रूप से उन्मुख होते हैं।
corsiKa

8

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

x, y, z फ्लोटिंग पॉइंट इटेरेंट्स के रूप में स्पष्ट रूप से भौतिक विज्ञानों में फोरट्रान की लोकप्रियता के साथ आए, भौतिक विज्ञानियों ने इंटीग्रल्स को स्रोत कोड में परिवर्तित कर दिया (क्योंकि एकीकरण आमतौर पर स्थानिक सीमा से अधिक था ... जैसा कि x 100 एट कैशेरा में जाता है)

मेरे पास इसे वापस करने का संदर्भ नहीं है, लेकिन जैसा कि मैं कहता हूं, यह काफी पुराने प्रोफेसर से आया है और बहुत कुछ समझ में आता है।

उम्मीद है की यह मदद करेगा


6

मुझे लगता है कि गणित में, जे, के का उपयोग सारांश में और मैट्रिक्स तत्वों के लिए संकेत देने के लिए किया जाता है (मैं स्तंभों के लिए पंक्तियों और जम्मू के लिए)। गणितीय संकेतन में, कुछ अक्षरों का उपयोग अन्य लोगों की तुलना में अधिक बार एक विशिष्ट अर्थ के साथ किया जाता है, उदाहरण के लिए, ए, बी, स्थिरांक के लिए, एफ, जी, एच कार्यों के लिए, x, y, z चर या निर्देशांक के लिए, i, j, k सूचकांकों के लिए। कम से कम यह वही है जो मुझे उस मठ से याद आता है जिसे मैंने स्कूल में लिया था।

हो सकता है कि इस अंकन को कंप्यूटिंग में स्थानांतरित कर दिया गया हो क्योंकि शुरुआत में कई कंप्यूटर वैज्ञानिक गणितज्ञ थे या कम से कम एक मजबूत गणितीय पृष्ठभूमि थी।


3

i == इटरेटर या इंडेक्स

मेरी समझ हमेशा से 'आई' रही है, क्योंकि जब लूप आमतौर पर किसी ज्ञात इंडेक्स स्टेप के साथ पुनरावृत्ति या ट्रैवर्सिंग के लिए एक अच्छा विकल्प होता है। 'J' और 'k' अक्षर अच्छे से फॉलो करते हैं क्योंकि नेस्टेड लूप्स की अक्सर जरूरत होती है और ज्यादातर सहज रूप से 'j' == दूसरी इंडेक्स और 'k' == तीसरी इंडेक्स को जानते हैं क्योंकि वे उस पैटर्न को अल्फाबेट में फॉलो करते हैं। इसके अतिरिक्त, इस मानक सम्मेलन के बाद कई लोग सुरक्षित रूप से मान सकते हैं कि 'के' लूप में संभवतः 'जे' और 'आई' लूप होंगे।


1

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


1

"मैं" सूचकांक के लिए है।

एक एकल अक्षर आपकी आंख के लिए कोड की लाइन को स्कैन करना आसान बनाता है। लूप के रूप में आम कुछ के लिए, सूचकांक के लिए एक एकल चरित्र आदर्श है। कन्वेंशन के कारण "i" का अर्थ क्या है, इसके बारे में कोई भ्रम नहीं है।


0

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

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