web-dev-qa-db-ja.com

私たちのほとんどがループカウンター変数として 'i'を使用するのはなぜですか?

私たちの多くが同じ変数名を使用してこの同じパターンを繰り返す理由について誰かが考えましたか?

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

私が今まで見たほとんどのコードは、ijkなどを反復変数として使用しているようです。

どこかから拾ったと思いますが、なぜこれがソフトウェア開発で普及しているのでしょうか。それは私たち全員がCから拾ったものですか、それともそのようなものですか?

しばらく頭の後ろにあったかゆみ。

131
kprobst

ijは、かなり長い間、かなりの数の数学で添え字として通常使用されてきました(たとえば、高水準言語より前の論文でも、「X私、j"、特に合計のようなもので)。

彼らがFortranを設計したとき、彼らは(どうやら)同じことを許可することに決めたので、「I」から「N」で始まるすべての変数はデフォルトで整数になり、他のすべての変数は実数(浮動小数点)になります。見逃した人にとっては、これが古いジョーク「神は実数である(宣言された整数でない限り)」のソースです。

ほとんどの人はそれを変える理由をほとんど見ていなかったようです。それは広く知られ、理解されており、非常に簡潔です。時々、あなたは何かのような本当の利点があると考えている精神病者によって書かれた何かを見ます:

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;

ありがたいことに、これはかなりまれですが、ほとんどのスタイルガイドでは、長くてわかりやすい変数名canは役立つものの、常にdo n'tが特に必要であることを指摘しています。このように、変数のスコープは1行または2行のコードのみです。

208
Jerry Coffin

i-インデックス。

索引付けループの反復に使用される一時変数。すでにiをお持ちの場合、jkなどに行くよりも自然でしょうか。

そのコンテキストでは、idxもよく使用されます。

短く、単純で、変数名がそうであるように、変数の使用法が正確に何であるかを示します。

65
littleadv

FORTRANでは、iがデフォルトで整数型になる最初の文字でした。暗黙的な整数型の全範囲は、iからnまでの文字でした。 3次元のループを処理すると、ij、およびkが得られます。追加の寸法についてもパターンは続きました。同様に、実数を必要とするループ変数に使用される浮動小数点としてデフォルト設定された「x」、「y」、および「z」。

litleadvが注記しているように、iもインデックスの最小の縮約です。

これらの変数がローカルで使用されていることを考えると、よりわかりやすい名前を使用していないという問題は発生しません。

39
BillThor

まとめから来ていると思います:

Summation

34
Raphael

数年前の私の計算理論の理論を別として、起源は数学的総和表記からであると言われました。 i、j、kは一般に整数反復変数として使用され、計算理論に関する初期のテキスト(もちろん、主に適用される数学)から引き継がれました。どうやらクヌースらの作品を見ています。これをバックアップします。

浮動小数点反復子としてのx、y、zは、物理学の研究者が積分をソースコードに変換することから、物理学におけるFortranの人気で明らかになった(積分は一般に空間境界を超えているため、xは100などになる)

私はこれをバックアップするためのリファレンスはありませんが、私が言うように、それはかなり古い教授からのものであり、多くの意味をなすようです。

お役に立てれば

8
Stephen

数学では、i、j、kは、総和と行列要素のインデックスを示すために使用されると思います(iは行、jは列)。数学表記では、一部の文字は特定の意味で他の文字よりも頻繁に使用される傾向があります。 a、b、cは定数、f、g、hは関数、x、y、zは変数または座標、i、j、kはインデックス。少なくとも、これは私が学校で取った数学から思い出すものです。

初めは、多くのコンピュータ科学者が数学者であるか、少なくとも強力な数学的背景を持っていたため、この表記がコンピューティングに移行したのかもしれません。

6
Giorgio

i ==イテレータまたはインデックス

ループは通常、既知のインデックスステップを使用して反復またはトラバースするため、私の理解は常に「i」が適切な選択です。ネストされたループがしばしば必要となるため、文字「j」と「k」はよく続きます。アルファベットのパターンに従うため、ほとんどの場合、「j」== 2番目のインデックスと「k」== 3番目のインデックスが本能的にわかります。さらに、多くのこの標準的な慣例に従って、 'k'ループは 'j'ループと 'i'ループでラップされる可能性が高いと想定できます。

3
jimp

i、j、kはデカルト座標系で使用されます。同じシステムの軸を表し、常に変数として使用されるxおよびyと比較すると、i、j、およびkもそこから取得されたと言えます。

1
Sergey

「i」はインデックス用です。

1文字でコード行を簡単にスキャンできます。ループと同じくらい一般的なものでは、インデックスの単一の文字が理想的です。慣習により「i」が何を意味するかについて混乱はありません。

1
jojo

私がプログラミングを始めたとき、ダートマスBASICは新しいものでした。当時のこの言語と他のいくつかの言語のすべての変数は単一の文字でした。さらに、FORTRAN変数の命名規則と、入力がはるかに簡単で、1文字だけであるという事実、および古いプログラマーと教師からの理解。わかりませんが、いいですね。

0
Dave