Por que a maioria de nós usa 'i' como uma variável de contador de loop?

117

Alguém pensou em por que tantos de nós repetimos esse mesmo padrão usando os mesmos nomes de variáveis?

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

Parece que a maioria do código que eu já vi usa i , j , k e assim por diante como variáveis de iteração.

Suponho que peguei isso de algum lugar, mas me pergunto por que isso é tão comum no desenvolvimento de software. É algo que todos pegamos de C ou algo assim?

Apenas uma coceira que tive por um tempo na parte de trás da minha cabeça.

    
por kprobst 13.06.2017 / 20:56
fonte

10 respostas

196

i e j têm sido usados como subscritos em matemática por um bom tempo (por exemplo, mesmo em artigos que antecedem idiomas de nível mais alto, você frequentemente vê coisas como "X i] , j ", especialmente em coisas como um somatório).

Quando eles projetaram Fortran, eles (aparentemente) decidiram permitir o mesmo, então todas as variáveis começando com "I" até "N" padrão para inteiro, e todas as outras para real (ponto flutuante). Para aqueles que perderam, esta é a fonte da velha piada "Deus é real (a menos que seja declarado inteiro)".

A maioria das pessoas parece ter visto poucos motivos para mudar isso. É amplamente conhecido e compreendido e bastante sucinto. De vez em quando você vê algo escrito por algum psicótico que acha que há uma vantagem real para 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;

Felizmente, isso é muito raro, e a maioria dos guias de estilos agora apontam que, enquanto nomes de variáveis descritivas podem ser úteis, você não sempre precisa deles, especialmente para algo como isso, onde o escopo da variável é apenas uma ou duas linhas de código.

    
por 13.06.2017 / 20:56
fonte
61

i - índice.

Uma variável temporária usada para indexar a iteração de loop. Se você já tem um i , o que é mais natural do que ir para j , k e assim por diante?

Nesse contexto, idx é frequentemente usado também.

Curto, simples e mostra exatamente qual é o uso da variável, como o nome da variável deve ser.

    
por 25.06.2011 / 01:43
fonte
38

Em FORTRAN i foi a primeira letra a usar como padrão o tipo inteiro. O intervalo completo de tipos inteiros implícitos era qualquer começando com as letras i to n . Trabalhando com loops para três dimensões, obtemos i , j e k . O padrão continuou para dimensões adicionais. Da mesma forma, 'x', 'y' e 'z', cujo padrão era o ponto flutuante, usado para variáveis de loop que exigiam números reais.

Como litleadv notes, i também é uma contração mínima para o índice.

Dado o uso local dessas variáveis, não vejo problema em não usar um nome mais descritivo.

    
por 25.06.2011 / 15:40
fonte
34

Acredito que vem da sumarização :

    
por 25.06.2011 / 03:51
fonte
8

Foi-me dito, em um aparte pela minha teoria do professor de computação há alguns anos, que a origem era da notação matemática da soma. i, j, k eram comumente usados como variáveis de iteração inteira, e foram transferidos dos primeiros textos sobre a teoria de computação (que, claro, é matemática aplicada principalmente). Aparentemente, olhando para o trabalho de Knuth et al. apóia isso.

x, y, z como iterantes de ponto flutuante aparentemente vieram com a popularidade de Fortran nas ciências físicas, de pesquisadores de física convertendo integrais ao código-fonte (já que as integrações eram comumente ultrapassadas por limites espaciais ... como x vai para 100 et cetera)

Eu não tenho uma referência para sustentar isso, mas, como eu digo, veio de um professor bem antigo e parece fazer muito sentido.

Espero que isso ajude

    
por 25.06.2011 / 04:20
fonte
6

Eu acho que i, j, k são usados em Matemática para indicar índices em summações e para elementos de matriz (i para as linhas e j para as colunas). Na notação matemática, algumas letras tendem a ser usadas com um significado específico com mais frequência do que outras, por ex. a, b, c para constantes, f, g, h para funções, x, y, z para variáveis ou coordenadas, i, j, k para índices. Pelo menos é disso que eu me lembro do Math que aprendi na escola.

Talvez essa notação tenha sido transferida para a computação porque, no início, muitos cientistas da computação eram matemáticos ou pelo menos tinham um sólido conhecimento matemático.

    
por 26.06.2011 / 21:52
fonte
3

i == iterador ou índice

Meu entendimento sempre foi 'i' é uma boa escolha, já que os loops são tipicamente para iterar ou percorrer com uma etapa de índice conhecida. As letras 'j' e 'k' seguem bem uma vez que os loops aninhados são frequentemente necessários e a maioria irá saber instintivamente 'j' == segundo índice e 'k' == terceiro índice, uma vez que seguem esse padrão no alfabeto. Além disso, com muitos seguindo esta convenção padrão, pode-se assumir com segurança que um loop 'k' provavelmente terá um loop 'j' e 'i' envolvendo-o.

    
por 25.06.2011 / 22:10
fonte
1

i, j, k são usados no sistema de coordenadas cartesianas. Comparando com x e y que representam axises no mesmo sistema e que são sempre usados como variáveis, podemos dizer que i, j e k também vieram daí.

    
por 25.06.2011 / 15:44
fonte
1

"i" é para o índice.

Uma única letra torna mais fácil para o seu olho para escanear a linha de código. Para algo tão comum quanto loop, um único caractere para o índice é ideal. Não há confusão sobre o que "i" significa devido à convenção.

    
por 25.06.2011 / 16:59
fonte
0

Quando comecei a programar, o Dartmouth BASIC era novo. Todas as variáveis nesta e em algumas outras línguas da época eram caracteres únicos. Acrescente a isso a convenção de nomenclatura de variáveis de FORTRAN e o fato de que é muito mais fácil digitar, apenas um caractere, e o entendimento de programadores e professores mais antigos. Eu não sei, mas parece bom.

    
por 25.06.2011 / 22:22
fonte