it-swarm-eu.dev

Warum verwenden die meisten von uns 'i' als Schleifenzählervariable?

Hat jemand darüber nachgedacht, warum so viele von uns dasselbe Muster mit denselben Variablennamen wiederholen?

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

Es scheint, dass der meiste Code, den ich mir jemals angesehen habe, i, j, k usw. als Iterationsvariablen verwendet.

Ich nehme an, ich habe das irgendwo aufgegriffen, aber ich frage mich, warum dies in der Softwareentwicklung so weit verbreitet ist. Ist es etwas, das wir alle von C aufgegriffen haben oder so?

Nur ein Juckreiz, den ich seit einiger Zeit im Hinterkopf hatte.

131
kprobst

i und j werden in der Regel seit geraumer Zeit als Indizes in einigen mathematischen Bereichen verwendet (z. B. sehen Sie selbst in Artikeln, die älter sind als höhere Sprachen, häufig Dinge wie "X.ich, j", besonders in Sachen wie einer Summe).

Als sie Fortran entwarfen, beschlossen sie (anscheinend), dasselbe zuzulassen, sodass alle Variablen, die mit "I" bis "N" beginnen, standardmäßig auf Ganzzahl und alle anderen auf Real (Gleitkomma) eingestellt sind. Für diejenigen, die es verpasst haben, ist dies die Quelle des alten Witzes "Gott ist real (sofern nicht als Ganzzahl deklariert)".

Die meisten Menschen scheinen wenig Grund gesehen zu haben, dies zu ändern. Es ist weithin bekannt und verstanden und ziemlich prägnant. Hin und wieder sieht man etwas, das von einem Psychotiker geschrieben wurde, der glaubt, dass etwas wie ein echter Vorteil ist:

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;

Zum Glück ist dies jedoch ziemlich selten, und die meisten Styleguides weisen jetzt darauf hin, dass lange, beschreibende Variablennamen können nützlich sein, Sie nicht sie immer benötigen, insbesondere für etwas Dies ist der Fall, wenn der Gültigkeitsbereich der Variablen nur ein oder zwei Codezeilen umfasst.

208
Jerry Coffin

i - Index.

Eine temporäre Variable, die zum Indizieren der Schleifeniteration verwendet wird. Wenn Sie bereits ein i haben, was ist natürlicher, als zu j, k und so weiter zu gehen?

In diesem Zusammenhang wird häufig auch idx verwendet.

Kurz, einfach und zeigt genau, wie die Variable verwendet wird, wie der Variablenname lauten sollte.

65
littleadv

In FORTRAN war i der erste Buchstabe, der standardmäßig den Integer-Typ verwendete. Der gesamte Bereich der impliziten Ganzzahltypen begann mit den Buchstaben i bis n. Das Arbeiten mit Schleifen für drei Dimensionen brachte uns i, j und k. Das Muster wurde für weitere Dimensionen fortgesetzt. Ebenso wurden 'x', 'y' und 'z', die standardmäßig als Gleitkomma verwendet wurden, für Schleifenvariablen verwendet, für die reelle Zahlen erforderlich waren.

Wie litleadv feststellt, ist i auch eine minimale Kontraktion für den Index.

Angesichts der lokalen Verwendung dieser Variablen sehe ich kein Problem darin, keinen aussagekräftigeren Namen zu verwenden.

39
BillThor

Ich glaube, es kommt von der Summation:

Summation

34
Raphael

Neben meiner Professorin für Berechnungstheorie vor ein paar Jahren wurde mir gesagt, dass der Ursprung aus der mathematischen Summationsnotation stamme. i, j, k wurden üblicherweise als ganzzahlige Iterationsvariablen verwendet und von den frühen Texten zur Berechnungstheorie (die natürlich hauptsächlich angewandte Mathematik ist) übernommen. Anscheinend haben wir uns die Arbeit von Knuth et al. unterstützt dies.

x, y, z als Gleitkomma-Iteranten kamen offenbar mit der Popularität von Fortran in den Naturwissenschaften ins Spiel, von Physikforschern, die Integrale in Quellcode konvertierten (da Integrationen üblicherweise über räumliche Grenzen gingen ... wie x auf 100 und so weiter geht)

Ich habe keinen Hinweis darauf, aber wie gesagt, es stammt von einem ziemlich alten Professor und scheint sehr sinnvoll zu sein.

Hoffe das hilft

8
Stephen

Ich denke, i, j, k werden in der Mathematik verwendet, um Indizes in Summationen und für Matrixelemente anzugeben (i für die Zeilen und j für die Spalten). In der mathematischen Notation werden einige Buchstaben häufiger mit einer bestimmten Bedeutung verwendet als andere, z. a, b, c für Konstanten, f, g, h für Funktionen, x, y, z für Variablen oder Koordinaten, i, j, k für Indizes. Zumindest erinnere ich mich an die Mathematik, die ich in der Schule gelernt habe.

Vielleicht wurde diese Notation auf das Rechnen übertragen, weil zu Beginn viele Informatiker Mathematiker waren oder zumindest einen starken mathematischen Hintergrund hatten.

6
Giorgio

i == Iterator oder Index

Mein Verständnis war immer, dass 'i' eine gute Wahl ist, da Schleifen normalerweise zum Iterieren oder Durchlaufen mit einem bekannten Indexschritt dienen. Die Buchstaben 'j' und 'k' folgen gut, da häufig verschachtelte Schleifen benötigt werden und die meisten instinktiv 'j' == zweiter Index und 'k' == dritter Index kennen, da sie diesem Muster im Alphabet folgen. Wenn viele dieser Standardkonvention folgen, kann man außerdem davon ausgehen, dass eine 'k'-Schleife wahrscheinlich eine' j'- und eine 'i'-Schleife enthält.

3
jimp

i, j, k werden im kartesischen Koordinatensystem verwendet. Im Vergleich zu x und y, die Achsen im selben System darstellen und immer als Variablen verwendet werden, können wir sagen, dass i, j und k auch von dort kamen.

1
Sergey

"i" steht für Index.

Ein einzelner Buchstabe erleichtert Ihrem Auge das Scannen der Codezeile. Für etwas so Häufiges wie eine Schleife ist ein einzelnes Zeichen für den Index ideal. Es gibt keine Verwirrung darüber, was "i" aufgrund der Konvention bedeutet.

1
jojo

Als ich anfing zu programmieren, war Dartmouth BASIC neu. Alle Variablen in dieser und einigen anderen Sprachen waren zu dieser Zeit einzelne Zeichen. Hinzu kommt die Namenskonvention für FORTRAN-Variablen und die Tatsache, dass es viel einfacher ist, nur ein Zeichen einzugeben, und das Verständnis älterer Programmierer und Lehrer. Ich weiß es nicht, aber es klingt gut.

0
Dave