web-dev-qa-db-fra.com

Pourquoi la plupart d'entre nous utilisent «i» comme variable de compteur de boucle?

Quelqu'un a-t-il pensé pourquoi tant d'entre nous répètent ce même modèle en utilisant les mêmes noms de variables?

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

Il semble que la plupart des codes que j'ai consultés utilisent i, j, k et ainsi de suite comme variables d'itération.

Je suppose que je l'ai récupéré quelque part, mais je me demande pourquoi cela est si répandu dans le développement de logiciels. Est-ce quelque chose que nous avons tous choisi de C ou quelque chose comme ça?

Juste une démangeaison que j'ai depuis un moment à l'arrière de ma tête.

131
kprobst

i et j sont généralement utilisés comme indices dans pas mal de mathématiques depuis un certain temps (par exemple, même dans les articles antérieurs aux langues de niveau supérieur, vous voyez souvent des choses comme "Xi, j", en particulier dans des choses comme une sommation).

Quand ils ont conçu Fortran, ils ont (apparemment) décidé d'autoriser la même chose, donc toutes les variables commençant par "I" par "N" par défaut en entier, et toutes les autres en réel (virgule flottante). Pour ceux qui l'ont raté, c'est la source de la vieille blague "Dieu est réel (sauf si déclaré entier)".

La plupart des gens semblent avoir vu peu de raisons de changer cela. C'est largement connu et compris, et assez succinct. De temps en temps, vous voyez quelque chose écrit par un psychotique qui pense qu'il y a un réel avantage à quelque chose comme:

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;

Heureusement, cela est assez rare, et la plupart des guides de style soulignent maintenant que, bien que les noms de variable descriptifs longs peuvent être utiles, vous pas en avez toujours besoin, en particulier pour quelque chose comme ceci où la portée de la variable est seulement une ligne ou deux de code.

208
Jerry Coffin

i - index.

Variable temporaire utilisée pour l'itération de la boucle d'indexation. Si vous avez déjà un i, quoi de plus naturel que d'aller à j, k, etc.?

Dans ce contexte, idx est également souvent utilisé.

Court, simple et montre exactement à quoi sert la variable, comme le nom de la variable devrait l'être.

65
littleadv

Dans FORTRAN i était la première lettre à utiliser par défaut le type entier. La gamme complète des types d'entiers implicites était toute commençant par les lettres i à n. L'utilisation de boucles pour trois dimensions nous a permis d'obtenir i, j et k. Le motif s'est poursuivi pour des dimensions supplémentaires. De même, "x", "y" et "z", qui étaient par défaut des virgules flottantes, étaient utilisés pour les variables de boucle nécessitant des nombres réels.

Comme litleadv note, i est également une contraction minimale pour l'index.

Étant donné l'utilisation locale de ces variables, je ne vois aucun problème à ne pas utiliser un nom plus descriptif.

39
BillThor

Je crois que cela vient du Summation:

Summation

34
Raphael

On m'a dit, en aparté par mon professeur de théorie du calcul il y a quelques années, que l'Origine venait de la notation de sommation mathématique. i, j, k étaient couramment utilisés comme variables d'itération entières, et il a été transféré des premiers textes sur la théorie du calcul (qui est bien sûr principalement des mathématiques appliquées). Apparemment, en regardant les travaux de Knuth et al. soutient cela.

x, y, z en tant qu'itérants à virgule flottante sont apparemment apparus avec la popularité de Fortran dans les sciences physiques, des chercheurs en physique convertissant les intégrales en code source (car les intégrations étaient généralement sur des limites spatiales ... comme x va à 100 et cetera)

Je n'ai pas de référence pour étayer cela, mais comme je l'ai dit, cela vient d'un professeur assez âgé et semble avoir beaucoup de sens.

J'espère que cela t'aides

8
Stephen

Je pense que i, j, k sont utilisés en mathématiques pour indiquer les indices dans les sommations et pour les éléments de matrice (i pour les lignes et j pour les colonnes). En notation mathématique, certaines lettres ont tendance à être utilisées avec une signification spécifique plus souvent que d'autres, par ex. a, b, c pour les constantes, f, g, h pour les fonctions, x, y, z pour les variables ou coordonnées, i, j, k pour les indices. C'est du moins ce que je retiens des mathématiques que j'ai prises à l'école.

Peut-être que cette notation a été transférée à l'informatique car au début, de nombreux informaticiens étaient des mathématiciens ou avaient au moins une solide formation mathématique.

6
Giorgio

i == itérateur ou index

Ma compréhension a toujours été "i" est un bon choix car les boucles sont généralement destinées à l'itération ou à la traversée avec une étape d'index connue. Les lettres "j" et "k" suivent bien car des boucles imbriquées sont souvent nécessaires et la plupart connaissent instinctivement "j" == deuxième index et "k" == troisième index car elles suivent ce modèle dans l'alphabet. De plus, avec beaucoup de personnes suivant cette convention standard, on peut supposer en toute sécurité qu'une boucle "k" aura probablement des boucles "j" et "i" pour la boucler.

3
jimp

i, j, k sont utilisés dans le système de coordonnées cartésiennes. En comparant avec x et y qui représentent des axes dans le même système et qui sont toujours utilisés comme variables, on peut dire que i, j et k viennent également de là.

1
Sergey

"i" est pour l'index.

Une seule lettre facilite la lecture de la ligne de code par vos yeux. Pour quelque chose d'aussi courant que la boucle, un seul caractère pour l'index est idéal. Il n'y a aucune confusion quant à ce que signifie "i" en raison de la convention.

1
jojo

Quand j'ai commencé la programmation, Dartmouth BASIC était nouveau. Toutes les variables de cette langue et de certaines autres langues à l'époque étaient des caractères uniques. Ajoutez à cela la convention de dénomination des variables FORTRAN et le fait qu'il est beaucoup plus facile de taper, un seul caractère et la compréhension des programmeurs et des enseignants plus âgés. Je ne sais pas, mais ça sonne bien.

0
Dave