変数「i」と「j」がカウンターに使用されるのはなぜですか?


179

これはまったく馬鹿げた質問のように思えるかもしれませんが、私は質問したくないので不思議です...

「i」と「j」がほとんどの制御構造でカウンタとして使用する変数になったのはなぜですか?

常識的には未知の値を表すのに使われるXのようなものですが、皆が同じように何度も何度も教えられるのには理由があるに違いないと思います。

それは実際にベストプラクティスや慣例に推奨されているためですか、それとも背後に不明瞭な理由がありますか?

念のために、好きな名前を付けられることと、変数名は関係ないことを知っています。


17
i =反復、j =反復後
ajreal 2010年

7
奇妙な「c」が選ばれなかったのですか?Intel 'cx'カウンタレジスタと同様。


16
実際の質問が人気があるからといってなぜコミュニティWikiになるのですか?これは共産主義を彷彿とさせます。誰かが本当にクールなものを発明した場合、政府はその発明を盗んでコミュニティと共有します。
orokusaki

9
間違った方法でクローズ:ここでの回答は他のqnよりも有益です...
Charles Stewart

回答:


330

これは最終的には数学から来ています。合計表記法では、伝統的に最初のインデックスにiを使用し、2番目のインデックスにjを使用します。例(http://en.wikipedia.org/wiki/Summationから):

\sum_{i=1}^{n} i = \frac{n^2 + n}{2}

また、変数x 1、x 2、... x nの束がある場合など、もののコレクションにもそのように使用され、任意の変数はx iと呼ばれます。

なぜそうなのかについては、SLaksが正しいと思います。それは、私がIndexの最初の文字だからです。


93
@SLott:そして、なぜi数学で使われているのですか?
10

13
@Slaks:いい質問ですね。私は実際には「i」はインデックスよりも整数から来るかもしれないと思います。黒板に書くのも簡単だと思います。70年代に戻ると、「i」と「j」を完全に区別できる方法で書いたことを確認するよう警告されました。確かに、私たちは完全に明確にするために、「i」を逆「j」とまったく同じように描くように言われました。
S.Lott、2011年

26
@ S.Lott:私はそれが整数から来るのではないかと思います。整数にはℤ(黒板の太字のZ)を使用します。これは、ドイツ語のZahlen数字を意味する)を表すためです。合計表記がほぼ同時に発生したと仮定すると、ドイツ語ベースの表記が予想されます。インデックスを表すドイツ語はIndexであり、これもiで始まります。そして、黒板に書くのが特に難しい文字はあまり思いつきません。まあ、exceptを除いて:-)
アンタルスペクター-ザブスキー

14
「この慣習は、この慣習が以前から存在していたために存在しています。」それが語源のしくみです。PIEで特定のノイズが特定の意味を持っていた理由は誰にもわかりません。数学的慣習を説明するのは良いことですが、問題は「なぜそれらが制御構造のカウンターとして使用されるのか」です。そのため、誰かがさらに遡る答えを出すまで、これが最善です。少なくとも数学で使用される理由を推測しています。おそらくバイナリチョップを使用して、適切な数学的歴史学者が知ることができます。ユークリッドはそれを使わなかった、とフォン・ノイマンは使ったに違いない。コーシーはどうですか?彼はインデックスを多用しました
Steve Jessop

14
関数の定数にa、b、cを、関数の変数にx、y、zを使用することを推奨したのはラグランジュだったと思います。i、j、kはベクトルの「方向」を示し、このような形式的な和の因数は方程式の自由度[方向、別の名前]と解釈できます。
David

200

それはFortranにさかのぼると思います。IからQで始まる変数はデフォルトで整数で、その他は実数でした。これは、それIが最初の整数変数でありJ、2番目の変数などであるため、ループでの使用に陥っていました。


53
これは、数学者がi、j、kを総和および行列乗算インデックスなどの便利な添え字として使用するのを好むように見える方法に由来すると思います。初期のFortran IIマニュアルでそれについて読んだことを覚えています。(はい、Fortran II。)
S.Lott、

5
はい、FORTRANはこれらの規則を元にしています。
J 'Queue

9
私が教えられたINいませんQ。グーグルはほぼ同意するようです。(FORTRANの異なるバージョン?)
ヒューアレン

2
そして、Fortranの他のすべては、デフォルトで本物でした。これは、「整数は宣言されない限り、神は実在する」という冗談につながります。
Lagerbaer 2010年

4
@learnvst-数学者は少なくとも1世紀前からi、jを使用していたため。
Martin Beckett

195

数学者はi、j、kを使用して代数の整数(添え字、系列、総和など)を指定していました(たとえば1836または1816など)。未知の変数にはアルファベットの最後(...、x、y、z)から、定数には最初(a、b、c ...)の文字を使用する習慣は、一般にRene Descartes起因ます(また、ここで)私は私を想定して、J、Kは... N(整数のためのアルファベットの真ん中)にすぎによる彼に思われます。


17
私にとって、これは明らかに最良の答えです。(Michael Borgwardtの回答に対する立派な言及。これも数学的な慣例を引用していますが、それほど具体的ではありません。)申し訳ありませんが、あなたの回答は受け入れられません。私にできることは、それに賛成票を与えることだけです。
John Y

3
これが、コミュニティが承認した回答に投票できるようにする必要がある理由です(そして、確かに、これはuservoiceに属していることを知っています)。
クレデンス2009年

へえ。グーグルはものごとを切り刻んでいるので、この答えで古いグーグルブックへのリンクを時々更新します。偶然にも、現在リンクされている1816年のドキュメントには、Charles Babbage(おそらく彼は差分エンジン/分析エンジンの名声を持っている)が著者として含まれています。したがって、これは間違いなく、コンピュータプログラマによる整数変数「i」の最初の使用例です:^)
timday

..OK 1816リンクは、「i」が使用されているページには移動しませんが、そこにはあります。
2009

129

i =整数

整数変数はIからNまでの文字で始まり、実変数は他の文字で始まるFortranから来ています。したがって、私は最初で最も短い整数変数名でした。Fortranは、広く使用された最も初期のプログラミング言語の1つであり、それを使用するプログラマーによって開発された習慣は他の言語にも引き継がれました。

編集:私はそれが数学に由来するという答えに問題はありません。間違いなく、Fortranのデザイナーがインスピレーションを得た場所です。事実、とにかく、私にとってFortranでプログラミングを始めたとき、ループカウンターにI、J、Kなどを使用しました。それらが短く、整数として最初に合法的に許可された変数名だったからです。HSの2年生として、私はおそらくデカルト(および他の非常に少数)について聞いたことがありますが、プログラミング時の数学とのつながりはほとんどありませんでした。実際、私が最初に取ったコースは「Fortran for Business」と呼ばれ、数学の教員ではなく、ビジネス/エコの教員によって教えられました。

少なくとも私にとって、変数の命名は数学とはほとんど関係がありませんでしたが、他の言語に持ち込んだFortranコードを書く習慣を身につけたためです。


4
FORTRANだったと思います。
Cade Roux、

4
ええ、フォートラン.....それは心を腐らせます。ループ変数名としてi iiおよびiiiを使用するプログラマーがいます。もう1つの症状は、母音のない6文字の変数/関数名です。
EvilTeach 2009年

4
@tvan、私はIからNで始まる変数がデフォルトで整数に設定されていると確信していますが、それでもそれらを実数として宣言できるため、「神は実数です。とにかく、何年も前の私の思い出は完璧ではないかもしれないので、+ 1。
paxdiablo 2009年

10
やあ、FORTRANの連中は数学者からそれを手に入れました!
timday

6
@timdayに同意します。シリーズのインデックスとしてiを使用することは、少なくとも2世紀の間、数学者によって実践されてきました。
スコッティーT

91

iI ndexの略です。
j後に来るi


12
彼はアルファベットについて話していたと思います。想像力を働かせてください:)
ジャック

33
@ジャック:@ピートは冗談だったと思う;-)
Chris Pfohl

13
@Cpfohl:うん、退屈になりたかっただけだ:D
Jack

4
@ピート・カーカム:ピートさん、ありがとうございます。先月の最高の笑いでした。
AMissico 2010年

@SLaksは...私はあなたの権利は、それが私は数学で使用されるインデックス表記から来ているインデックス=ないと信じていen.wikipedia.org/wiki/Index_notation またはここで素敵なリファレンスですphysics.ucsb.edu/~physCS31/fall2010/index- notation.pdf
ジョンハートソック2010年

63

これらの記号は、電子計算機が発明されるずっと前から、数学の行列インデックスとして使用されていました。


52

数学的な意味で)インデックスから派生している可能性が高いと思います。これは、合計または他のセットベースの操作でインデックスとして一般的に使用され、プログラミング言語が登場する前からそのように使用されている可能性が高いです。


いい答えだ。これは(私にとって)確かに最もありそうな説明のようです。
Noldorin 2009年

3
うん。合計の数学表記は、Y = Σ Xiすべてのプログラミング言語に先行しています。
Treb

使う度にインデックスを考えていますi。しかし、もともと私が主に使用しているのは、他の場所で見るすべてのコードがそれを使用しているためです。それはFortranプログラマーから継承される可能性があります...
恐ろしい

47

数学では、同様の方法で使用される「匿名」変数にアルファベットの連続した文字を使用することを優先します。したがって、「i、j、k」だけでなく、「f、g、h」、「p、q、r」、「x、y、z」(まれに「u、v、w」が前に付加される)、そして「α、β、γ」。

現在、「f、g、h」と「x、y、z」は自由に使用されていません。前者は関数用、後者は次元用です。「p、q、r」も関数によく使用されます。

次に、使用可能なシーケンスには他の制約があります。「l」と「o」は、多くのフォントで「1」と「0」に非常に似ているため、回避されます。「t」は時間に、「d&δ」は微分に、「a、s、m、v」は加速度、変位、質量、速度の物理測定によく使用されます。これにより、数学でインデックスの不要な関連付けがなくても、3つの連続した文字のギャップがあまり多くなくなります。

次に、他のいくつかの人が気づいたように、数学の規則は初期のプログラミング規則に強い影響を与え、「α、β、γ」は多くの初期の文字セットでは利用できませんでした。


2
同意した。しかし、複数の意味があるにa, b, cもかかわらず、かなり一般的に使用されるシーケンスaです
Stobor

32

私は、i、j、kがからのものであるという別の可能な答えを見つけましたHamilton's Quaternions

代替テキスト

オイラーは虚数単位としてiを選びました。

ハミルトンは、-1の平方根をさらに2つ必要としました。 ii = jj = kk = ijk = -1

ハミルトンは本当に影響力があり、4900は1900年以前に3D分析を行うための標準的な方法でした。それまで、数学者は(ijk)を一致したセットと考えることに慣れていました。 ベクトル解析は、四元分析を交換し、それがあったため、1890年代には良い方法マクスウェル方程式を書くこと。しかし、人々はこのようなとしてベクトル量を記述する傾向にあった。(3i-2j+k) 代わりに、 (3,-2,1)。したがって、(ijk)はR ^ 3の標準基底ベクトルとなりました。

最後に、物理学者は群論を使用して微分方程式系の対称性を記述し始めました。したがって、(ijk)は「順列グループによって入れ替えられるベクトル」を暗示するようになり、その後、「特定のセットですべての可能な値をとるインデックスのようなもの」へと流れました。これは、基本的にはforループでの意味です。


11
ついに質問への別のアプローチ、興味深いポイント+1
Fabian

30

破棄する(少し偏った)

a seems an array
b seems another array 
c seems a language name
d seems another language name
e seems exception
f looks bad in combination with "for" (for f, a pickup?)
g seems g force
h seems height

i seems an index                    
j seems i (another index)

k seems a constant k
l seems a number one (1) 
m seems a matrix
n seems a node
o seems an output
p sounds like a pointer
q seems a queue
r seems a return value
s seems a string
t looks like time
u reserved for UVW mapping or electic phase 
v reserved for UVW mapping or electic phase or a vector
w reserved for UVW mapping or electic phase or a weight
x seems an axis (or an unknown variable)
y seems an axis
z seems a third axis

3
私はnをnumberと見なします。通常、セット内の要素の数です。
Tom Leys、

6
ああ男性、そしてXXXはどのように見えますか?))創造性のための+1;)
Hovhannes Grigoryan

時々私は...ほとんどの時間は、私は他の人がそのようなことのために自分の頭の中に出てくるニーモニックのソート何を気にする必要はないことがうれしい
ティースHeidecke

21

ある晴れた日の午後、アルキメデスは何を考えているのか(晴れた日の午後にいつものように)、彼の仲間のエラトステネスに出くわしました。

アルキメデスは、「アルキメデスからエラトステネスへの挨拶!平衡状態にある複数の球形剛体の比率に対する解決策を考え出そうとしています。これらの物体を複数回繰り返したいのですが、恐ろしい時間を追跡しています。何回イテレーションしたか」

エラトステネス氏は、「なぜアルキメデスはキッズの熟したプラムなのか。砂の連続する行にマークを付けるだけで、イテレーション内で行ったイテレーションの数を追跡することができるのだ」と述べた。

アルキメデスは、彼の親友がこのような単純な解決策を思いついたのは間違いなく知性の輝かしい標識であることを世界に叫びました。しかし、アルキメデスは彼が考えている間、彼の砂場の周りを輪になって歩くのが好きだと述べました。したがって、どの行が一番上にあり、どの行が一番下にあるのかを見失う危険性がありました。

「おそらく、これらの行の横にアルファベットの文字を付けて、どの行がどれであるかが常にわかるようにする必要があります。どう思いますか?」「でもエラトステネス...どんな文字を使ってもいいですか?」

エラトステネスは、彼がどの文字が最適かわからないと確信し、アルキメデスにも同じように言った。しかし、アルキメデスは満足せず、貧しい司書が少なくとも現在の球の均衡解に必要とする2つの文字を選択するように言い続けました。

エラトステネスは、ようやく2通の手紙の絶え間ない要求に飽き飽きして、「私は知らないだけです!!!」と叫んだ。

そのため、アルキメデスはエラトステネスの感嘆文の最初の2文字を選択し、その貢献を友人に感謝しました。


これらのシンボルは古代ギリシャのJava開発者によってすぐに採用され、残りはまあ歴史です。


6
...と手紙がありましたj
Andrew Grimm

うわー、それはほぼホフスタッターのGEBから亀とアキレスの物語のように読まれます
ProfK

15

多くのループがInt型の変数を使用してカウントを行うためです。

for (int i = 0; etc

入力すると、実際には頭の中で読み上げます(読むときのように)ので、頭の中で「int ....」と言います。

「int ....」の直後に文字を作成する必要がある場合は、「i」と入力/入力します。これは、「int」と言ったときに最初に思いつく文字だからです。

次のように、名前を使って自分のために単語のスペルを読むことを学び始める子供たちに単語をスペルするように:

WORDスペルWilliam W、Ok O、Ruby R、Done D

つまり、最初の文字に基づいてInt I、Double d、Float f、string sなどと言います。

そして、jが使用されているのは、int Iを実行すると、Jがその直後に続くためです。


7
iこの構文よりも古い。
10

1
これは、子供からのがらくたを混乱させる優れた方法です。あなたは本当にあなたにそのような綴りを教えるのですか?
オービットでの軽さのレース2011年

14

私はそれが他の言及された理由の組み合わせだと思います:

手始めに、 'i'は数学者によってその表記法で一般的に使用され、バイナリではない(つまり、何らかの方法で解析および字句解析する必要があった)言語でのコンピューティングの初期の頃、コンピュータのユーザーの大多数は数学者(...と科学者とエンジニア)もそうでしたので、この表記法はプログラミングループ用のコンピューター言語で使用されるようになり、それ以来、一種のこだわりを持っています。

これと、メモリのように非常に初期の画面スペースが非常に限られていたという事実を組み合わせると、短い変数名を保持することが理にかなっています。


13

おそらく歴史的なのでしょうか?

FORTRAN、間違いなく最初の高水準言語であり、デフォルトでi、j、k、l、mが整数データ型として定義されており、ループは整数変数によってのみ制御できます。

例えば:

do 100 i = j、100,5 .... 100 continue ....


それはあまりにも多くの数1のように見えるのでFWIWは、私は通常手紙リットルをスキップ
Nosredna

13

i =イテレータ、i =インデックス、i =整数

あなたが「i」がそれを意味することを理解することは、それでも「法案に適合します」。

また、ループ内にコードが1行しかない場合を除いて、イテレータ/インデックス/整数変数にもっと意味のある名前を付ける必要があります。例:employeeIndex

ところで、私は通常、単純なイテレータループで「i」を使用します。もちろん、複数行のコードが含まれている場合を除きます。


13

i = iota、j = jot; 両方の小さな変更。

iotaはギリシャ語のアルファベットの最小の文字です。英語では、その意味は「新約聖書の句から: "天国と地球が過ぎ去るまで、イオタではなく、ドットではなく、法から渡るであろう"のように、小さな変化に関連しています。 (マタ5:18)。

カウンターは、値の小さな変化を表します。

そして、iotaからjot(iot)が出てきます。これは、小さな変更の同義語でもあります。

cf. http://en.wikipedia.org/wiki/Iota


13

まあ数学から:(ラテン文字用)

a、b:定数または整数として整数として使用
c:定数
d:導関数
e:オイラー数
f、g、h:関数
i、j、k:インデックス(単位ベクトルと四元数も)
l:通常は使用されません。1
m、nのように見えます:行列の行と列、または有理数の整数として
o:使用されていません(ほとんどo表記でない場合)
p、q:素数としてよく使用される
r:変数の空間変化素数に関連する他の時間
s、t:空間および時間変数またはsは、tの変数の変更として使用されます
u、v、w:変数の変更
x、y、z:変数


11

考えられる主な理由はたくさんあると思います。

  • 数学者はi、数式でとj自然数に使用します(少なくとも複素数を使用するものは少なくとも)、そのため、これはプログラミングに引き継がれました
  • Cから、iヒントにint。そして、もしあなたが別のものを必要とするならint、それi2は長すぎるので、あなたはを使うことにしましたj
  • 最初の文字がタイプを決定し、それがである言語がiありintegerます。


7

それは間違いなく、長い間コンピュータプログラミングに先行してきた数学から来ています。

それで、もし数学でどこから来たのでしょうか?私の完全な教育を受けていない推測は、ある研究者が言ったように、数学者はアルファベットのクラスタを類似のものに使用することを好む-関数にはf、g、hです。数値変数の場合、x、y、z。論理変数の場合、p、q、r。u、v、w(特に微積分における他の変数のセット)。多くの場合、a、b、c。i、j、kは反復変数に役立ちますが、これは可能性を使い果たします。なぜm、nではないのですか?まあ、それらは整数に使用されますが、多くの場合、反復変数自体ではなく、反復の終点です。

誰かが数学の歴史家に尋ねるべきです。


6

カウンタはプログラムで非常に一般的であり、コンピューティングの初期の頃はすべてがプレミアムでした...
プログラマは当然ピクセルを節約しようとし、「i」は他のどの文字よりも少ないピクセルで表現できました。(数学者は怠惰なので、同じ理由でそれを選びました-最小のグリフとして)。
前に述べたように、「j」は自然に続く...

:)


24
コンピューティングの初期には、ピクセルは存在しませんでし
10

1
@Slaks、それは1つの勝利コメントです。それを読んでいる私の顔のニヤリと投票を見てください。いいね!
ProfK

「プログラマーは自然にピクセルを節約しようとしました、そして、「i」は表すために他のどの文字よりも少ないピクセルを必要としました。」<<<それは陽気です。
ocodo

1
...したがって、時期尚早の最適化が生まれました!
Gerrat、2011

4

私はそれをいくつかの理由で使用します。

  • 通常、私のループはintベースなので、親指で扱うスペースを除いて、キーボードで「int i」と入力して完全な三角形を作成します。これは、入力する非常に高速なシーケンスです。

  • "i"はイテレータ、整数、増分、またはインデックスを表すことができ、それぞれ論理的に意味があります。

私の個人的な使用法は別として、整数変数がI-Nの文字を使用するFORTRANから派生したという理論は正しいです。


4

私は1965年にControl Data Corp. 3100でFORTRANを学びました。「I」から「N」で始まる変数は整数であることを暗示していました。例:「IGGY」と「NORB」は整数、「XMAX」と「ALPHA」は浮動小数点でした。ただし、明示的な宣言によってこれをオーバーライドできます。

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