これは絶対に馬鹿げた質問のように思えるかもしれませんが、私は質問しないのはあまりにも興味があります...
「i」と「j」がほとんどの制御構造でカウンターとして使用する変数になったのはなぜですか
常識的には、未知の値を表すために使用されるXのようなものですが、誰もが何度も同じ方法で教えられる理由があるに違いないと考えざるを得ません。
それは、実際にベストプラクティスや慣習のために推奨されているからですか、それとも背後にはっきりしない理由があるのでしょうか?
念のために、私は自分が好きな名前を付けることができ、変数名は関係ないことを知っています
最終的には数学に由来します:総和表記は伝統的に最初のインデックスにiを使用しますj2番目の場合など。例( http://en.wikipedia.org/wiki/Summation から):
また、変数の束xがある場合のように、物事のコレクションにもそのように使用されます1、 バツ2、 ... バツn、任意の1つはxとして知られます私。
なぜそうなのかというと、SLaksが正しいと思うのは、私がIndexの最初の文字だからです。
Fortranにさかのぼると思います。 IからQで始まる変数はデフォルトで整数で、他は実数でした。これは、I
が最初の整数変数であり、J
が2番目などであることを意味するため、ループで使用するようになりました。
数学者は、i、j、kを使用して代数(整数、添字、級数、合計など)の整数を指定しました(たとえば 1836 または 1816 ) FORTRAN変数タイプの起源(デフォルト)。不明な変数にはアルファベットの末尾(...、x、y、z)から、定数には先頭(a、b、c ...)からの文字を使用する習慣は、通常 attributed = to Rene Descartes 、( here も参照)ので、整数のi、j、k ... n(アルファベットの中央)は、彼も。
i =整数
整数変数はI〜Nの文字で始まり、実変数は他の文字で始まるFortranから来ています。したがって、私は最初で最も短い整数変数名でした。 Fortranは、広く使用されている最も初期のプログラミング言語の1つであり、それを使用するプログラマーが開発した習慣は、他の言語にも引き継がれました。
EDIT:数学から導き出される答えに問題はありません。間違いなく、Fortranデザイナーがインスピレーションを得た場所です。事実、とにかく、Fortranでプログラミングを始めたとき、ループカウンタにはI、J、K、...を使用しました。なぜなら、それらは短く、整数の法的に認められた最初の変数名だからです。 H.S.の2年生として私はおそらくデカルト(および他のごく少数)のことを聞いたことがありますが、プログラミング時には数学とはほとんど関係がありませんでした。実際、私が最初に受講したコースは「Fortran for Business」と呼ばれ、数学の学部ではなく、ビジネス/エコの学部によって教えられました。
少なくとも私にとって、変数の命名は数学とはほとんど関係がありませんでしたが、他の言語に持ち込んだFortranコードを書く習慣を身に付けたため、すべてがそうでした。
i
は 私ndex。j
はi
の後に続きます。
これらの記号は、電子計算機が発明されるずっと前から数学のマトリックスインデックスとして使用されていました。
私はそれがインデックスから派生している可能性が最も高いと思います( 数学的な意味 )-合計またはその他のセットベースの操作でインデックスとして一般的に使用され、おそらくプログラミングが行われる前からそのように使用されていました言語。
数学では、同様の方法で使用される「匿名」変数にアルファベットの連続した文字を使用することを好みます。したがって、「i、j、k」だけでなく、「f、g、h」、「p、q、r」、「x、y、z」(まれに「u、v、w」が追加される)、および「α、β、γ」。
現在、「f、g、h」および「x、y、z」は自由に使用できません。前者は関数用で、後者は次元用です。 「p、q、r」は、関数にもよく使用されます。
次に、使用可能なシーケンスには他の制約があります。多くのフォントで「1」と「0」に似ているため、「l」と「o」は避けられます。 「t」は時間に、「d&δ」は微分に、「a、s、m、v」は加速度、変位、質量、速度の物理的測定によく使用されます。これにより、インデックスの数学に不要な関連性のない3つの連続した文字のギャップがそれほど多くなくなります。
その後、他のいくつかの人が気づいたように、数学の規則は初期のプログラミング規則に強い影響を与え、「α、β、γ」は多くの初期の文字セットでは利用できませんでした。
私は、i、j、およびkがHamilton's Quaternions
から来ているという別の可能な答えを見つけました。
オイラーは虚数単位にiを選びました。
ハミルトンは-1のさらに2つの平方根を必要としました:ii = jj = kk = ijk = -1
ハミルトンは本当に影響力があり、1900年以前は四元数が3D分析を行う標準的な方法でした。それまでに、数学者は(ijk)を一致セットとして考えることに慣れていました。 ベクトル計算が四元数分析に置き換わりました 1890年代には、マックスウェルの方程式を書くのにより良い方法であったためしかし、人々は次のようにベクトル量を書く傾向がありました:(3i-2j+k)
の代わりに(3,-2,1)
。そのため、(ijk)はR ^ 3の標準基底ベクトルになりました。
最後に、物理学者は微分方程式系の対称性を記述するためにグループ理論を使用し始めました。そのため、(ijk)は「順列グループによって交換されるベクトル」を暗示し始め、次に「指定されたセットのすべての可能な値をとるインデックスのようなもの」に向かってドリフトしました()は基本的にforループを意味します。
破棄することにより(少し偏った)
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
ある晴れた日の午後、アルキメデスは何を考えていたのか(晴れた日の午後は普通だったように)、彼の仲間のエラトステネスに出くわした。
アルキメデスは、「アルキメデスからエラトステネスへの挨拶!平衡状態にあるいくつかの球形剛体の比率に対する解決策を考え出そうとしています。これらの物体を複数回繰り返したいのですが、恐ろしい時間を追跡しています何回繰り返したのか!」
エラトステネスは、「なぜアルキメデス、あなたは子供のプラムを熟させたのか、砂の中の連続した行の列をマークするだけで、それぞれが繰り返しの中で行った繰り返しの数を追跡することができました!」
アルキメデスは、彼の偉大な友人がそのような簡単な解決策を思い付くための紛れもなく知性の輝かしいビーコンであると世界に叫んだ。しかし、アルキメデスは、彼が熟考している間、彼が彼の砂場のまわりで円を歩くのが好きであると述べました。したがって、どの行が一番上にあり、どの行が一番下にあったかを追跡できなくなるリスクがありました。
「おそらく、私はこれらの行を横にアルファベットの文字でマークして、どの行がどの行であるかを常に把握する必要があります!あなたはそれをどう思いますか?」 「しかし、エラトステネス...私はどんな文字を使うのでしょうか?」と尋ねました。
エラトステネスは、どの文字が最適かわからないと確信し、アルキメデスに同じように言いました。しかし、アルキメデスは満足していなかったので、貧しい司書に少なくとも現在の球体の平衡解に必要な2つの文字を選択させるように仕向け続けました。
エラトステネスは、2文字の絶え間ない要求についにうんざりして、「私は知りません!!!」と叫びました。
そこでアルキメデスはエラトステネスの冒ex文の最初の2文字を選び、その貢献に友人に感謝しました。
これらのシンボルは、古代ギリシャのJava開発者によってすぐに採用されました。残りは、歴史です。
多くのループがInt型変数を使用してカウントを行うためだと思います
for (int i = 0; etc
そして、あなたがタイプするとき、あなたは実際にあなたの頭の中でそれを話します(あなたが読むときのように)、あなたの心の中で、あなたは「int ....」と言います
「int ....」の直後に文字を作成する必要がある場合は、「i」と入力/入力します。これは、「int」と言ったときの最初の文字だから
次のように、名前を使って単語のスペルを読んで学習を始める子供に単語をスペルするように:
単語のスペルWilliam W、Ok O、Ruby R、Done D
つまり、最初の文字に基づいてInt I、Double d、Float f、string sなどと言います。
Jが使用されるのは、int Iを実行すると、Jがその直後に続くためです。
私はそれが他の言及された理由の組み合わせだと思う:
手始めに、数学者は「i」を記法で一般的に使用し、バイナリではない言語でのコンピューティングの初期には(つまり、何らかの方法で解析および字句解析する必要がありました)、コンピューターのユーザーの大部分はまた、数学者(...および科学者やエンジニア)も、プログラミングループ用のコンピューター言語で表記法が使用されるようになり、それ以来、ずっと行き詰まっています。
これと、非常に初期の画面スペースは非常にであり、メモリと同様に制限されていたという事実と組み合わせて、短い変数名を保持することは理にかなっています。
まあ数学から:(ラテン文字用)
a、b:定数として、または有理数の整数として使用されます
c:定数
d:デリバティブ
e:オイラーの番号
f、g、h:関数
i、j、k:インデックスです(単位ベクトルとクォータニオンも)
l:通常は使用されません。 1のように見える
m、n:行列の行と列、または有理数の整数
o:使用されていません(表記法がほとんどない場合)
p、q:素数としてよく使用されます
r:時には素数に関連する変数の空間的変化
s、t:空間および時間変数またはsは、tの変数の変更として使用されます
u、v、w:変数の変更
x、y、z:変数
i =イテレータ、i =インデックス、i =整数
「i」は、「法案に適合」するという意味です。
また、そのループ内にコードが1行しかない場合を除き、イテレーター/インデックス/整数変数にもっと意味のある名前を付ける必要があります。いいね:employeeIndex
ところで、私は通常、単純なイテレータループで「i」を使用します。もちろん、複数行のコードが含まれていない限り。
i = iota、j = jot;両方の小さな変更。
イオタはギリシャ語のアルファベットの中で最も小さい文字です。英語では、その意味は「1つのイオタではない」(新約聖書のフレーズから:「天と地が消えるまで、イオタではなく、点ではなく、法から渡る」というように、小さな変化にリンクされています(マタ5:18))。
カウンターは、値の小さな変化を表します。
また、iotaからはjot(iot)が出てきますが、これも小さな変更の同義語です。
おそらく歴史的?
間違いなく最初の高レベル言語であるFORTRANは、デフォルトで整数データ型としてi、j、k、l、mを定義し、ループは整数変数によってのみ制御できます。
例えば:
do 100 i = j、100,5 .... 100 continue ....
多くの考えられる主な理由、私は推測します:
i
およびj
を使用します(Complex Numbersを使用するものはめったに、少なくとも)プログラミングi
ヒントからint
へ。また、別のint
が必要な場合、i2
は長すぎますので、j
を使用することにします。i
はinteger
になります。Fortranから取得されます。i、j、k、l、m、nは暗黙的に整数です。
それは間違いなく数学から来ています。それはコンピュータプログラミングよりもずっと前からです。
それでは、数学のどこから来たのでしょうか?私の完全に教育されていない推測は、ある仲間が言ったように、数学者は関数のためにf、g、hなどの類似のものにアルファベットのクラスターを使用することを好むということです。数値変数のx、y、z。論理変数のp、q、r;他の変数セット、特に計算ではu、v、w。 a、b、c多くのこと。 i、j、kは反復変数に役立ち、可能性を使い果たします。なぜm、nでないのですか?まあ、それらは整数に使用されますが、多くの場合、反復変数自体よりも反復の終点になります。
数学の歴史家に尋ねるべきです。
カウンターはプログラムで非常に一般的であり、コンピューティングの初期には、すべてはプレミアムでした...
プログラマーは当然ピクセルを節約しようとしましたが、「i」は他のどの文字よりも少ないピクセルで表現する必要がありました。 (数学者は、怠け者で、同じ理由でそれを選んだ-最小のグリフとして)。
前述のように、「j」は自然に続きました...
:)
1965年にControl Data Corp. 3100でFORTRANを学びました。「I」から「N」で始まる変数は整数であると暗示されていました。例:「IGGY」と「NORB」は整数で、「XMAX」と「ALPHA」は浮動小数点でした。ただし、明示的な宣言によってこれをオーバーライドできます。
いくつかの理由で使用しています。
通常、私のループはintベースなので、親指で処理するスペースを除いて、キーボードで「int i」と入力して完全な三角形を作成します。これは非常に高速な入力シーケンスです。
「i」は、イテレータ、整数、増分、またはインデックスを表し、それぞれ論理的に意味があります。
私の個人的な用途はさておき、FORTRANから派生したという理論は正しいです。整数変数では文字I-Nを使用しました。