ทำไมพวกเราส่วนใหญ่จึงใช้ 'i' เป็นตัวแปรตัวนับลูป


126

มีใครคิดบ้างไหมว่าทำไมเราหลายคนจึงทำซ้ำรูปแบบเดียวกันนี้โดยใช้ชื่อตัวแปรเดียวกัน

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

ดูเหมือนว่ารหัสที่สุดที่ผมเคยมองที่เคยใช้i, j, kและอื่น ๆ เป็นตัวแปรซ้ำ

ฉันคิดว่าฉันเลือกมันมาจากที่ไหนสักแห่ง แต่ฉันสงสัยว่าทำไมสิ่งนี้ถึงแพร่หลายมากในการพัฒนาซอฟต์แวร์ มันเป็นสิ่งที่เราทุกคนหยิบขึ้นมาจาก C หรืออะไรทำนองนั้น?

แค่คันที่ฉันมีอยู่พักหนึ่งที่หลังศีรษะ


4
ถามไปแล้วเป็นเวลานานแล้วใน SO; บางทีควรย้ายที่นี่: stackoverflow.com/questions/454303/…และstackoverflow.com/questions/4137785//
BlueRaja - Danny Pflughoeft

8
มันเป็นคำถามที่ซ้ำกันและฉันชอบคำตอบนี้ เนื่องจากชื่อ D ijk stra
Vivart

2
ฉันมักจะคิดว่าฉัน, j และ k ถูกพรากไปจาก D ijk stra
Christian Kjær

1
BTW: ฉันใช้ii(และjj,, kk... ) เสมอเพื่อให้ค้นหาได้ง่ายขึ้นเมื่อค้นหา
Sabuncu

1
คุณจะใช้อะไรอีก
Thorbjørn Ravn Andersen

คำตอบ:


205

iและjโดยทั่วไปจะใช้เป็นตัวห้อยในคณิตศาสตร์สักระยะหนึ่ง (เช่นแม้ในเอกสารที่มีภาษาระดับสูงก่อนวันจริงคุณมักเห็นสิ่งต่าง ๆ เช่น "X i, j " โดยเฉพาะอย่างยิ่งในสิ่งที่รวมกัน)

เมื่อพวกเขาออกแบบ Fortran พวกเขา (เห็นได้ชัด) ตัดสินใจที่จะอนุญาตให้เหมือนกันดังนั้นตัวแปรทั้งหมดที่ขึ้นต้นด้วย "I" ถึง "N" เริ่มต้นเป็นจำนวนเต็มและอื่น ๆ ทั้งหมดเป็นของจริง (ทศนิยม) สำหรับผู้ที่พลาดไปแล้วนี่เป็นที่มาของเรื่องตลกเก่า ๆ ว่า "God is real (เว้นแต่จะมีการประกาศเป็นจำนวนเต็ม)"

คนส่วนใหญ่ดูเหมือนจะเห็นเหตุผลเล็กน้อยที่จะเปลี่ยนแปลงสิ่งนั้น มันเป็นที่รู้จักและเข้าใจอย่างกว้างขวางและค่อนข้างกระชับ ทุกครั้งที่คุณเห็นบางสิ่งบางอย่างที่เขียนขึ้นโดยคนโรคจิตบางคนที่คิดว่ามีข้อได้เปรียบที่แท้จริงสำหรับบางสิ่งเช่น:

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 ฉันไม่ได้คิดถึงความสัมพันธ์ทางคณิตศาสตร์ที่นี่ นี่คือการรับรู้ที่น่าสนใจ
Casey Patton

79
+1 สำหรับการเกิดจากโรคจิตสิ่งที่บางคนคิดว่าจะมีสไตล์
Crashworks

2
ตกลง - เหตุใด i และ j จึงถูกใช้เป็นตัวห้อยในคณิตศาสตร์? ฉันคิดว่าการใช้งานนี้มาก่อน FORTRAN :-) ฉันแน่ใจว่า Knuth รู้ ...
Guy Sirton

34
@Guy 'i' ใช้สำหรับดัชนี j เป็นตัวอักษรถัดไปหลังจาก i
Martin Beckett

3
ฉันและเจนั้นดีหรือแม้กระทั่งเป็นที่นิยมในกรณีส่วนใหญ่ตามที่เจอร์รีพูดพาดพิงถึง ปัญหาที่ใหญ่กว่าคือลูปที่ใหญ่จนคุณมองไม่เห็นและเข้าใจทุกสิ่งในหน้าจอเดียว ต้องมีการปรับโครงสร้างเหล่านั้นใหม่เพื่อให้กระชับขึ้น
เครก

64

i - ดัชนี

ตัวแปรชั่วคราวที่ใช้สำหรับการทำซ้ำการวนรอบดัชนี หากคุณมีอยู่แล้วiสิ่งที่เป็นธรรมชาติมากขึ้นกว่าที่จะไปj, kและอื่น ๆ ?

ในบริบทidxนั้นก็มักจะใช้เช่นกัน

สั้นง่ายและแสดงให้เห็นอย่างชัดเจนถึงการใช้งานของตัวแปรตามที่ชื่อตัวแปรควรเป็น


35
ijk = "ฉันแค่ล้อเล่น" :-)
Mahmoud Hossam

2
คุณสามารถอ้างอิงการอ้างอิงได้หรือไม่?
หลุยส์ริส

23
คุณสามารถอ้างอิงฉันเป็นข้อมูลอ้างอิงหากคุณต้องการ
Captain Sensible

1
อาจเพิ่มมูลค่าที่มักจะเป็นดัชนี (ตัวห้อย) ในอาร์เรย์ที่เข้าถึงได้ในลูป ไม่เสมอไป แต่ไม่ว่าคุณจะมองว่ามันเป็นดัชนีเข้าสู่อินเทอร์รัปชั่นหรือไม่ก็ตามมันยังคงสะดวกในการวางแนวจากคลาสทั่วไปของลูปไปเป็นคลาสลูปที่กว้างขึ้น BTW - ความกระวนกระวายใจส่วนบุคคล - สำหรับฉัน "ดัชนี" มีแนวโน้มที่จะบอกเป็นนัยถึง "ดัชนีฐานข้อมูล" ซึ่งรวมถึงพจนานุกรมคีย์ - เด - ห้อย / ตารางคว่ำในหน่วยความจำดังนั้นฉันจึงชอบ "ห้อย" มากกว่า "ดัชนี" เพื่อหลีกเลี่ยงความคลุมเครือ แต่ฉันยังคงใช้iสำหรับลูป
Steve314

3
ในรถไฟแห่งความคิดของคุณiอาจหมายถึงตัววนซ้ำเช่นกัน
totymedli

39

ใน FORTRAN iเป็นตัวอักษรตัวแรกที่เริ่มต้นเป็นประเภทจำนวนเต็ม ช่วงเต็มของประเภทจำนวนเต็มนัยคนใดที่เริ่มต้นด้วยตัวอักษรที่จะi nการทำงานกับลูปสำหรับสามมิติมีเราi, และj kรูปแบบต่อเนื่องสำหรับมิติเพิ่มเติม ในทำนองเดียวกัน 'x', 'y' และ 'z' ซึ่งเป็นค่าเริ่มต้นเป็นจุดลอยตัวที่ใช้สำหรับตัวแปรลูปซึ่งต้องการจำนวนจริง

ในฐานะที่เป็นlitleadvบันทึกย่อiก็เป็นการหดตัวน้อยที่สุดสำหรับดัชนี

ด้วยการใช้ตัวแปรเหล่านี้ในพื้นที่ฉันไม่เห็นปัญหาที่ไม่ใช้ชื่อที่มีความหมายมากขึ้น


สำหรับลูปเดี่ยวฉันเห็นด้วย แต่สำหรับลูปที่มีลูปฉันต้องการคำอธิบายมากกว่านี้
Edward Strange

1
คำตอบในท้ายที่สุดคือแรงเฉื่อย ฉันเริ่มทำมันกับ WATFOR (Waterloo FORTRAN) ในปี 1973 และ ... ฉันยังคงทำมันในปี 2011
Peter Rowell

1
@Crazy Eddie: หากลูปมีฟังก์ชั่นมากมายฉันก็เห็นด้วย แต่ด้วยลูปซ้อนกันแน่นความยาวของรหัสควรอยู่ในลำดับของ n + 1 หรือ 2n + 1 โดยที่ n คือจำนวนมิติ ในกรณีนั้นชื่อตัวแปรที่ยาวขึ้นอาจลดความสามารถในการอ่านได้
BillThor

11
+1 สำหรับ "In Fortran" เพราะนั่นเป็นวิธีที่ประเพณีเริ่มต้นขึ้น - ไม่สำคัญว่าคุณจะชอบ Fortran หรือไม่
artem

34

ฉันเชื่อว่ามาจากการรวม :

ผลบวก


3
ที่น่าสนใจ! สิ่งนี้มาก่อน FORTRAN แต่ในบริบทของ CS
kprobst

3
เนื่องจาก Backus มีผู้เชี่ยวชาญในวิชาคณิตศาสตร์ดูเหมือนว่ามีเหตุผล
dbasnett

9
อัจฉริยะ CS ช่วงต้นส่วนใหญ่มีทั้งแบบคณิตศาสตร์และวิศวกรรมไฟฟ้า แม้กระทั่งทุกวันนี้ "คอมพิวเตอร์ nerd" โดยเฉลี่ยของคุณมีทักษะทางคณิตศาสตร์โดยเฉลี่ยสูงกว่าเพราะคณิตศาสตร์และคอมพิวเตอร์มีความสำคัญเชิงตรรกะ
corsiKa

8

ฉันถูกบอกในนอกเหนือจากทฤษฎีการคำนวณของฉันสองสามปีที่ผ่านมาว่าต้นกำเนิดมาจากสัญกรณ์การรวมทางคณิตศาสตร์ i, j, k ถูกนำมาใช้เป็นตัวแปรซ้ำจำนวนเต็มและมันย้ายมาจากตำราต้นเกี่ยวกับทฤษฎีการคำนวณ (ซึ่งแน่นอนที่สุดคือคณิตศาสตร์ประยุกต์) เห็นได้ชัดว่ากำลังดูงานของ Knuth และคณะ สำรองข้อมูลนี้

x, y, z เป็นจุดลอยตัวที่ชัดเจนว่ามาพร้อมกับความนิยมของ Fortran ในด้านวิทยาศาสตร์กายภาพจากนักวิจัยฟิสิกส์ที่แปลงอินทิกรัลเป็นซอร์สโค้ด

ฉันไม่ได้มีการอ้างอิงเพื่อสำรองข้อมูลนี้ แต่อย่างที่ฉันพูดมันมาจากอาจารย์ที่ค่อนข้างเก่าและดูเหมือนสมเหตุสมผลมาก

หวังว่านี่จะช่วยได้


6

ฉันคิดว่าฉัน, j, k ถูกใช้ในวิชาคณิตศาสตร์เพื่อระบุดัชนีในผลรวมและองค์ประกอบเมทริกซ์ (i สำหรับแถวและ j สำหรับคอลัมน์) ในสัญกรณ์คณิตศาสตร์ตัวอักษรบางตัวมักใช้กับความหมายที่เฉพาะเจาะจงมากกว่าตัวอักษรอื่นเช่น a, b, c สำหรับค่าคงที่, f, g, h สำหรับฟังก์ชัน, x, y, z สำหรับตัวแปรหรือพิกัด, i, j, k สำหรับดัชนี อย่างน้อยนี่คือสิ่งที่ฉันจำได้จากคณิตศาสตร์ที่ฉันเข้าเรียน

บางทีสัญลักษณ์นี้ถูกถ่ายโอนไปยังการคำนวณเพราะในตอนแรกนักวิทยาศาสตร์คอมพิวเตอร์หลายคนเป็นนักคณิตศาสตร์หรืออย่างน้อยก็มีภูมิหลังทางคณิตศาสตร์ที่แข็งแกร่ง


3

i == ตัววนซ้ำหรือดัชนี

ความเข้าใจของฉันมักจะเป็น 'i' เป็นตัวเลือกที่ดีเนื่องจากลูปมักใช้สำหรับการวนซ้ำหรือการวนซ้ำในขั้นตอนดัชนีที่รู้จัก ตัวอักษร 'j' และ 'k' ติดตามได้ดีเนื่องจากลูปซ้อนกันมักจะต้องการและส่วนใหญ่จะรู้ 'j' == ดัชนีที่สองและ 'k' == ดัชนีที่สามเนื่องจากพวกเขาทำตามรูปแบบตัวอักษรนั้น นอกจากนี้ด้วยการทำตามแบบแผนมาตรฐานนี้หลาย ๆ คนสามารถสันนิษฐานได้ว่าวง 'k' จะมีลูป 'j' และ 'i' ล้อมรอบ


1

i, j, k ถูกใช้ในระบบพิกัดคาร์ทีเซียน เมื่อเปรียบเทียบกับ x และ y ซึ่งแทน axises ในระบบเดียวกันและใช้เป็นตัวแปรเสมอเราอาจบอกว่า i, j และ k มาจากที่นั่นด้วย


1

"i" สำหรับดัชนี

อักษรตัวเดียวทำให้ตาของคุณสแกนเส้นรหัสได้ง่ายขึ้น สำหรับบางสิ่งที่พบได้ทั่วไปในวงเดียวอักขระหนึ่งตัวสำหรับดัชนีนั้นเหมาะสมที่สุด ไม่มีความสับสนว่า "i" หมายถึงอะไรเนื่องจากการประชุม


0

เมื่อฉันเริ่มเขียนโปรแกรม Dartmouth BASIC เป็นของใหม่ ตัวแปรทั้งหมดในนี้และภาษาอื่น ๆ ในเวลานั้นเป็นตัวอักษรเดียว เพิ่มไปที่แบบแผนการตั้งชื่อตัวแปร FORTRAN และความจริงที่ว่ามันง่ายกว่ามากในการพิมพ์อักขระเพียงตัวเดียวและความเข้าใจจากโปรแกรมเมอร์และครูที่มีอายุมากกว่า ฉันไม่รู้ แต่มันฟังดูดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.