¿Por qué la mayoría de nosotros usamos 'i' como una variable de contador de bucle?

117

¿Alguien ha pensado por qué tantos de nosotros repetimos este mismo patrón usando los mismos nombres de variable?

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

Parece que la mayoría de los códigos que he examinado utiliza i , j , k , etc. como variables de iteración.

Supongo que lo he recogido de alguna parte, pero me pregunto por qué esto es tan frecuente en el desarrollo de software. ¿Es algo que todos recogimos de C o algo así?

Solo una picazón que he tenido por un tiempo en la parte posterior de mi cabeza.

    
pregunta kprobst 13.06.2017 - 20:56

10 respuestas

195
Por lo general,

i y j se han usado como subíndices en un poco de matemáticas (p. ej., incluso en artículos que preceden a idiomas de nivel superior, con frecuencia ve cosas como "X i , j ", especialmente en cosas como una suma).

Cuando diseñaron Fortran, (aparentemente) decidieron permitir lo mismo, por lo que todas las variables que comienzan con "I" a través de "N" se establecen de forma predeterminada en enteros, y todas las demás en reales (punto flotante). Para aquellos que se lo han perdido, esta es la fuente del viejo chiste "Dios es real (a menos que se declare entero)".

La mayoría de las personas parecen haber visto pocas razones para cambiar eso. Es ampliamente conocido y entendido, y bastante sucinto. De vez en cuando ves algo escrito por un psicótico que cree que hay una ventaja real en algo como:

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;

Afortunadamente, esto es bastante raro, y la mayoría de las guías de estilo ahora señalan que si bien los nombres de variables descriptivos largos pueden ser útiles, no siempre los necesita, especialmente para algo como esto donde el alcance de la variable es solo una o dos líneas de código.

    
respondido por el Jerry Coffin 13.06.2017 - 20:56
61

i - índice.

Una variable temporal que se usa para indexar la iteración del bucle. Si ya tiene un i , ¿qué es más natural que ir a j , k , etc.?

En ese contexto, también se usa a menudo idx .

Corto, simple, y muestra exactamente cuál es el uso de la variable, como debería ser el nombre de la variable.

    
respondido por el littleadv 25.06.2011 - 01:43
38

En FORTRAN i fue la primera letra predeterminada para el tipo entero. El rango completo de tipos de enteros implícitos fue cualquiera que comenzara con las letras i a n . Trabajar con bucles para tres dimensiones nos dio i , j y k . El patrón continuó para dimensiones adicionales. Del mismo modo, 'x', 'y' y 'z' que se establecieron de forma predeterminada como punto flotante se utilizaron para las variables de bucle que requerían números reales.

Como notas litleadv , i también es una contracción mínima para el índice.

Dado el uso local de estas variables, no veo un problema que no use un nombre más descriptivo.

    
respondido por el BillThor 25.06.2011 - 15:40
34

Creo que viene de la Suma :

    
respondido por el Raphael 25.06.2011 - 03:51
8

Hace un par de años, mi profesor de teoría de computación me dijo hace un tiempo que el origen era la notación matemática de la suma. i, j, k se usaron comúnmente como variables de iteración de enteros, y se transfirió de los textos iniciales sobre teoría de computación (que, por supuesto, se aplica principalmente a las matemáticas). Aparentemente mirando el trabajo de Knuth et al. respalda esto.

x, y, z como iterantes de punto flotante aparentemente llegaron con la popularidad de Fortran en las ciencias físicas, desde los investigadores de física convirtiendo las integrales al código fuente (ya que las integraciones eran comúnmente más allá de los límites espaciales ... cuando x va a 100 et cetera)

No tengo una referencia para respaldar esto, pero como digo, vino de un profesor bastante mayor y parece tener mucho sentido.

Espero que esto ayude

    
respondido por el Stephen 25.06.2011 - 04:20
6

Creo que i, j, k se usan en Matemáticas para indicar índices en sumas y para elementos de matriz (i para las filas y j para las columnas). En la notación matemática, algunas letras tienden a usarse con un significado específico más a menudo que otras, por ejemplo. a, b, c para constantes, f, g, h para funciones, x, y, z para variables o coordenadas, i, j, k para índices. Al menos esto es lo que recuerdo de las Matemáticas que tomé en la escuela.

Tal vez esta notación se haya transferido a la informática porque al principio muchos científicos informáticos eran matemáticos o al menos tenían una sólida formación matemática.

    
respondido por el Giorgio 26.06.2011 - 21:52
3

i == iterador o índice

Mi comprensión siempre ha sido 'i' es una buena opción, ya que los bucles suelen ser para iterar o atravesar un paso de índice conocido. Las letras 'j' y 'k' siguen bien ya que a menudo se necesitan bucles anidados y la mayoría sabrá instintivamente el índice 'j' == segundo y el índice 'k' == tercer puesto que siguen ese patrón en el alfabeto. Además, como muchos siguen esta convención estándar, uno puede asumir con seguridad que un bucle 'k' probablemente tendrá un bucle 'j' e 'i' envolviéndolo.

    
respondido por el jimp 25.06.2011 - 22:10
1

i, j, k se utilizan en el sistema de coordenadas cartesiano. Comparando con x y y que representan ejes en el mismo sistema y que siempre se usan como variables, podemos decir que i, j y k también vinieron de allí.

    
respondido por el Sergey 25.06.2011 - 15:44
1

"i" es para índice.

Una sola letra hace que sea más fácil para sus ojos escanear la línea de código. Para algo tan común como un bucle, un solo carácter para el índice es ideal. No hay confusión en cuanto a lo que significa "i" debido a la convención.

    
respondido por el jojo 25.06.2011 - 16:59
0

Cuando comencé a programar, Dartmouth BASIC era nuevo. Todas las variables en este y algunos otros idiomas en ese momento eran caracteres individuales. Agregue a eso la convención de nombres de variables de FORTRAN y el hecho de que es mucho más fácil de escribir, solo un carácter, y la comprensión de programadores y maestros más antiguos. No lo sé, pero suena bien.

    
respondido por el Dave 25.06.2011 - 22:22

Lea otras preguntas en las etiquetas

Comentarios Recientes

¿Nos cambia un entorno? ¿Cometeremos errores en algún momento? Sabiendo cómo debíamos escribir 1, ¿hasta dónde llegaremos? ¿Cuánto tiempo desperdiciamos en la documentación? Es por eso que realmente arrojamos la toalla sobre las variables de flecha. No vamos a saber cuándo debemos hacer una llamada al método en bucle durante un año y medio. Es muy simple de la revisión de código en aras de la discusión de copiar y pegar. Tampoco vamos a buscar referencias variables. No vamos a tener que mirar / visitar... Lee mas