Neden çoğumuz 'i' yi döngü sayacı değişkeni olarak kullanıyoruz?


126

Neden birçoğumuzun aynı değişkeni aynı değişken isimlerini kullanarak yinelendiğini düşündüğü oldu mu?

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

Şimdiye kadar kullanımları baktım çoğu kodu görünüyor i, j, kve benzeri yineleme değişkenler olarak.

Sanırım bunu bir yerden aldım, ancak bunun yazılım geliştirmede neden bu kadar yaygın olduğunu merak ediyorum. Hepimiz C'den aldığımız bir şey mi, öyle bir şey mi?

Sadece bir süredir kafamın arkasında hissettiğim bir kaşıntı.


4
Zaten bir SO uzun zaman önce SO sordu; belki de
bunlar

8
Bu yinelenen bir soru ve ben bu cevabı seviyorum. D isminden dolayı ijk stra.
Vivart

2
Ben her zaman, ben, j ve k'nin, Djk Stra
Christian Kjær'den

1
BTW: Her zaman ii(ve jj,, kk...) kullanıyorum, böylece arama yaparken yerini bulmak daha kolay oluyor.
Sabuncu

1
Başka ne kullanırsın?
Thorbjørn Ravn Andersen

Yanıtlar:


205

ive jgenellikle bir süredir oldukça fazla matematikte abonelik olarak kullanılmıştır (örneğin, daha yüksek seviyeli dilleri önceden yayınlayan gazetelerde bile, "X i, j " gibi şeyleri, özellikle de bir özet gibi) sık sık görürsünüz .

Fortran'ı tasarladıklarında, (görünüşte) aynı şeye izin vermeye karar verdiler, bu yüzden "I" ile başlayan "N" varsayılanından tamsayıya, tüm değişkenler gerçek (kayan nokta). Onu özleyenler için bu, eski şakanın "Tanrı gerçektir (tamsayı belirtilmediği sürece gerçek") kaynağıdır.

Çoğu insan bunu değiştirmek için çok az sebep görmüş gibi görünüyor. Yaygın olarak bilinir ve anlaşılır ve özlüdür. Arada bir, bazı psikotikler tarafından yazılmış, şöyle bir şey için gerçek bir avantaj olduğunu düşünen bir şey görürsünüz:

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;

Neyse ki bu olsa oldukça nadirdir ve çoğu stil kılavuzları şimdi uzun, açıklayıcı değişken adları ise işaret edebilir yararlı olabilir, sen yok değişkenin kapsamı yalnızca bir satır veya iki kod olduğu her zaman, özellikle böyle bir şey için, onlara ihtiyacım .


13
+1 Burada matematik korelasyonu hakkında düşünmedim. Bu ilginç bir farkındalıktı.
Casey Patton

79
Bazılarının stil sahibi olduğunu hayal ettiği psikoza atfedilen + 1
Crashworks

2
Tamam - peki neden ben ve j matematikte abone olarak kullanılıyor? Ben Knuth bilir eminim :-) bu kullanım FORTRAN eskidir düşünüyorum ...
Guy Sirton

34
@Guy 'i' endekse göre, j i sonrasındaki harf i
Martin Beckett

3
i ve j, Jerry'nin istediği gibi, çoğu durumda iyi veya hatta tercih edilir. Daha büyük bir problem, o kadar büyük olan döngülerdir; her şeyi tek ekranda göremez ve anlayamazsınız. Bunların yeniden kırılması gerekir, böylece daha özlü olurlar.
Craig

64

i - indeks.

Döngü yinelemesini indekslemek için kullanılan geçici bir değişken. Zaten bir varsa i, gitmekten daha doğal olan şey j, kvb.?

Bu bağlamda idx, sıklıkla da kullanılır.

Kısa, basit ve değişkenin isminin tam olarak ne olduğunu, değişken ismi olması gerektiği gibi gösterir.


35
ijk = "Şaka yapıyorum". :-)
Mahmoud Hossam

2
referans verebilir misin?
Louis Rhys,

23
İstersen beni referans olarak gösterebilirsin.
Kaptan Sensible

1
Belki de, kelimenin tam anlamıyla döngüde erişilen bir dizinin tam anlamıyla bir dizin (alt simge) olduğunu eklemeye değer. Her zaman değil, fakat onu etkileşimler için bir dizin olarak görüp görmediğinize bakılmaksızın, genel bir döngü sınıfından daha geniş bir döngü sınıfına genelleme yapmak hala uygundur. BTW - kişisel freakiness - bana "index", bellekte anahtar-alt sözlükler / ters çevrilmiş tablolar da dahil olmak üzere "veritabanı dizini" gibi bir şey ifade etme eğilimindedir, bu yüzden belirsizliği önlemek için "dizin" yerine "abone" yi tercih ederim. Ama yine ide döngüler için kullanıyorum .
Steve314,

3
Düşünce treninizde iyineleyici de olabilir.
totymedli

39

FORTRAN'da itamsayı türüne varsayılan ilk harf oldu. Örtülü tamsayı tiplerinin tam kapsamlı herhangi harflerle başlayan edildi iiçin n. Üç boyutları için döngüler ile çalışma bize var i, jve k. Desen, ilave boyutlar için devam etti. Aynı şekilde, 'x', 'y' ve 'z', gerçek sayıları gerektiren döngü değişkenleri için kullanılan kayan nokta olarak varsayılan.

Gibi litleadvnotlar ida dizin için minimal bir daralma olduğunu.

Bu değişkenlerin yerel kullanımı göz önüne alındığında, daha açıklayıcı bir ad kullanılmayan bir sorun görmüyorum.


Tek döngüler için aynı fikirdeyim ama döngü içeren döngüler için biraz daha tanımlamayı seviyorum.
Edward Strange

1
Sonuçta cevap atalettir . 1973'te WATFOR (Waterloo FORTRAN) ile yapmaya başladım ve ... 2011'de hala yapıyorum.
Peter Rowell

1
@ Crazy Eddie: Eğer döngüler çok fazla işlevsellik içeriyorsa, buna katılıyorum. Ancak sıkıca iç içe geçmiş döngülerde, kodun uzunluğu n + 1 veya 2n + 1 düzeyinde olmalıdır; burada n, boyutların sayısıdır. Bu durumda daha uzun değişken isimleri okunabilirliği azaltabilir.
BillThor

11
"In Fortran" için +1 çünkü bu gelenek böyle başladı - Fortran'dan hoşlanıp hoşlanmadığın önemli değil.
artem

34

Zirveden geldiğine inanıyorum :

toplam


3
İlginç! Bu FORTRAN'dan önce gelir, ancak CS bağlamında?
kprobst

3
Backus matematikte yüksek lisans yapmış olduğundan mantıklı görünüyor.
dbasnett

9
İlk CS dehalarının çoğu ya matematik ya da kapsamlı matematik gerektiren elektrik mühendisliği içindeydi. Bugün bile, ortalama "bilgisayar ineğiniz" tipik olarak ortalamanın üzerinde matematik becerisine sahiptir, çünkü matematik ve bilgisayarlar çok mantıklı bir şekilde yönlendirilmiştir.
corsiKa

8

Birkaç yıl önce, hesaplama profesörü bir kenara, kökeninin matematiksel toplama göstergesinden kaynaklandığı söylendi. i, j, k, tamsayı yineleme değişkenleri olarak yaygın şekilde kullanılmıştır ve hesaplama teorisindeki ilk metinlerden (elbette öncelikle matematiksel olan) aktarılmıştır. Görünüşe göre Knuth ve ark. bunu yedekler.

kayan nokta yineleyicileri olarak x, y, z görünüşte Fortran'ın fiziksel bilimlerdeki popülaritesiyle, fizik araştırmacılarından integralleri kaynak koduna dönüştüren popülerliği ile karşılaştı (entegrasyonlar genellikle mekansal sınırların üzerinde olduğundan ...

Bunu destekleyecek bir referansım yok, ama dediğim gibi, oldukça eski bir profesörden geldi ve çok mantıklı görünüyor.

Bu yardımcı olur umarım


6

Ben, i, j, k'nin matematikteki toplamları ve matris elemanlarını gösteren endeksleri belirtmek için kullanıldığını düşünüyorum (i. Matematiksel notasyonda, bazı harfler diğerlerinden daha sık belirli bir anlamla kullanılmaya meyillidir, örneğin sabitler için a, b, c, fonksiyonlar için f, g, h, değişkenler veya koordinatlar için x, y, z, i, j, endeksler için k. En azından okulda aldığım Math'dan hatırladığım şey bu.

Belki de bu gösterim bilgisayarlara aktarılmıştır, çünkü başlangıçta birçok bilgisayar bilimcisi matematikçilerdi ya da en azından güçlü bir matematik geçmişleri vardı.


3

i == yineleyici veya dizin

Anlayışım her zaman 'i' olmuştur, çünkü döngüler tipik olarak bilinen bir endeks adımı ile yineleme veya geçiş yapmak içindir. 'J' ve 'k' harfleri iç içe geçmiş döngülere sıklıkla ihtiyaç duyulduğundan iyi takip eder ve çoğu içgüdüsel olarak 'j' == ikinci dizini ve 'k' == üçüncü dizini alfabedeki bu şekli takip ettiklerinden anlayacaktır. Ek olarak, bu standart konvansiyonu takip eden birçok kişiyle, bir 'k' döngüsünün muhtemelen 'j' ve 'i' döngülerini sarmalayacağına güvenle karar verilebilir.


1

i, j, k Kartezyen koordinat sisteminde kullanılır. Aynı sistemdeki eksenleri temsil eden ve her zaman değişken olarak kullanılan x ve y ile karşılaştırıldığında, i, j ve k'nin de oradan geldiğini söyleyebiliriz.


1

"i" indeks içindir.

Tek bir harf gözünüzün kod satırını taramasını kolaylaştırır. Döngü kadar yaygın bir şey için dizin için tek bir karakter idealdir. Kongre nedeniyle "ben" in ne anlama geldiği konusunda bir karışıklık yoktur.


0

Programlamaya başladığımda Dartmouth BASIC yeniydi. Bu andaki tüm değişkenler ve o sırada diğer bazı diller tek karakterdi. FORTRAN değişken adlandırma kuralını ve yazmanın çok daha kolay olduğu gerçeğini, sadece bir karakter ve eski programcı ve öğretmenlerden gelen anlayışı ekleyin. Bilmiyorum ama kulağa hoş geliyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.