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


126

なぜ私たちの多くが同じ変数名を使用してこの同じパターンを繰り返すのかを考えたことはありますか?

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

私が今まで見てきたほとんどのコードはi、繰り返し変数としてjkなどを使用しているようです。

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

頭の後ろでしばらくかゆみがありました。


4
すでにSOについての質問がありました。おそらくそれらはここに移行する必要があります。stackoverflow.com/questions/454303/...stackoverflow.com/questions/4137785/...
BlueRaja -ダニーPflughoeft

8
その重複した質問と私はこの答えが大好きです。D ijk stra という名前のため。
ヴィヴァルト

2
私はいつもi、j、kはD ijk stra から取られたと思っていた
クリスチャンケア

1
ところで:私はいつも使用してii(とjjkk検索するときに見つけることが容易になるように、...)。
Sabuncu

1
他に何を使いますか?
トールビョーンラウンアンデルセン

回答:


205

iそしてj一般的に(例えば、より高いレベルの言語に先行論文では、あなたが頻繁に「Xのようなものを参照かなりの時間の数学のかなりに添字として使用されているI、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;

ありがたいことに、これは非常にまれであり、ほとんどのスタイルガイドは、長くて説明的な変数名有用である一方で、特に変数のスコープが1行または2行のコードであるような場合には、必ずしもそれらを必要としないことを指摘しています。


13
+1ここで数学の相関については考えていませんでした。これは興味深い実現でした。
ケーシーパットン

79
ある人がスタイルであると想像するものを精神病に帰するために+1。
Crashworks

2
OK-では、なぜiとjは数学の添字として使用されるのですか?私はクヌースが知っていると確信している:-)この使用はFORTRAN以前から考えて...
ガイSirton

34
iはインデックスにある@Guy、jは私の後に次の文字である
マーティンベケット

3
ジェリーが示唆したように、ほとんどの場合、iとjで十分です。大きな問題は、1つの画面ですべてを把握して把握できないほど大きなループです。それらをより簡潔にするためにリファクタリングする必要があります。
クレイグ

63

i -インデックス。

ループ反復のインデックス付けに使用される一時変数。あなたが既に持っている場合はi、何がに行くよりも自然だjkなど、と?

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

短く、シンプルで、変数名がそうであるように、変数の使用法を正確に示します。


35
ijk =「冗談です」。:-)
マフムードホッサム

2
参考文献を引用できますか?
ルイスリース

23
必要に応じて、参照として私を引用することができます。
キャプテンセンシブル

1
ループでアクセスされる配列への文字列のインデックス(添字)であることが多いことを追加する価値があるかもしれません。常にではありませんが、インターレーションへのインデックスとして表示するかどうかに関係なく、一般的なループのクラスからより広いループのクラスに一般化すると便利です。BTW-個人的な異常-私にとって「インデックス」は、キーから添え字辞書/メモリ内の反転テーブルを含む「データベースインデックス」のようなものを暗示する傾向があるため、あいまいさを避けるために「インデックス」よりも「添え字」を好みます。しかし、私はまだiforループを使用しています。
Steve314

3
あなたの考えの中でi、イテレータも意味するかもしれません。
totymedli

39

FORTRAN iでは、整数型にデフォルト設定される最初の文字がありました。暗黙的な整数型の全範囲は、任意の文字で開始したin。3次元のループでの作業は、私たちを得たijk。パターンは追加の次元で継続しました。同様に、実数を必要とするループ変数に使用されるデフォルトの浮動小数点としての「x」、「y」、および「z」。

litleadv注意事項としてi、インデックスの最小収縮でもあります。

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


単一ループについては同意しますが、ループを含むループについてはもう少し説明が好きです。
エドワードストレンジ

1
最終的に答えは慣性です。私は1973年にWATFOR(ウォータールーFORTRAN)でそれをやって始めたと...私はまだ2011年にそれをやっている
ピーター・ローウェル

1
@Crazy Eddie:ループに多くの機能が含まれている場合、私は同意します。ただし、ループが密にネストされている場合、コードの長さはn + 1または2n + 1のオーダーである必要があります(nは次元数)。その場合、変数名を長くすると読みやすさが低下する場合があります。
-BillThor

11
「Fortran」の+1は、その伝統が始まった方法だからです。Fortranが好きかどうかは関係ありません。
アルテム

34

私はそれが要約から来ると信じています:

総和


3
面白い!これはFORTRANよりも前ですが、CSのコンテキストでは?
kprobst

3
バッカスは数学の修士号を持っていたので、理にかなっているようです。
dbasnett

9
初期のCS天才のほとんどは数学または電気工学のいずれかであり、広範な数学が必要でした。今日でも、数学とコンピューターは論理的に指向しているため、平均的な「コンピューターオタク」は通常、平均以上の数学スキルを持っています。
corsiKa

8

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

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

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

お役に立てれば


6

i、j、kは数学で使用され、合計のインデックスとマトリックス要素を示します(iは行、jは列)。数学表記では、一部の文字は他の文字よりも特定の意味で頻繁に使用される傾向があります。たとえば、定数にはa、b、c、関数にはf、g、h、変数または座標にはx、y、z、i、j、インデックスのk。少なくともこれは、私が学校で受けた数学のことです。

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


3

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

ループは通常、既知のインデックスステップで反復またはトラバースするため、私の理解は常に「i」が適切な選択です。ネストされたループが必要になることが多いため、文字「j」と「k」がよく続きます。ほとんどの場合、アルファベットのパターンに従うため、「j」== 2番目のインデックスと「k」== 3番目のインデックスがわかります。さらに、この標準の規則に従う多くの場合、「k」ループには「j」ループと「i」ループが含まれていると考えられます。


1

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


1

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

単一の文字により、目でコード行をスキャンしやすくなります。ループのような一般的なものの場合、インデックスの単一文字が理想的です。慣例により、「i」が何を意味するかについて混乱はありません。


0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.