왜 대부분의 사람들이 'i'를 루프 카운터 변수로 사용합니까?


126

왜 우리 중 많은 사람들이 같은 변수 이름을 사용하여 동일한 패턴을 반복하는지에 대해 생각한 적이 있습니까?

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

그것은 내가 사용을 검토 한 결과 대부분의 코드를 보인다 i, j, k등 반복 변수로.

필자가 어딘가에서 그것을 선택했다고 생각하지만 이것이 왜 소프트웨어 개발에서 그렇게 널리 퍼져 있는지 궁금합니다. 우리 모두가 C에서 얻은 것입니까?

머릿속에 잠시 동안 가려운 가려움증.


4
벌써 오래 전에 SO에 관해 물었습니다. 아마도 여기에서 마이그레이션해야합니다 : stackoverflow.com/questions/454303/…stackoverflow.com/questions/4137785/…
BlueRaja-Danny Pflughoeft

8
중복 질문 이며이 답변을 좋아합니다. D ijk stra 라는 이름 때문에 .
Vivart

2
난 항상 내가, J와 K가 D의에서에서 찍은 생각 IJK의 STRA
기독교 케아

1
BTW : 검색 할 때 쉽게 찾을 수 있도록 항상 ii(및 jj, kk...)을 사용합니다.
Sabuncu

1
다른 무엇을 사용 하시겠습니까?
Thorbjørn Ravn Andersen 님이

답변:


205

i그리고 j일반적으로 (더 높은 수준의 언어를 앞선 신문에, 자주 "X 같은 것들 참조, 예를 들면 꽤 오랫동안 수학의 아주 약간의 첨자로 사용 된 I, J를 요약처럼 특히 일에,").

그들이 포트란을 설계했을 때, 그들은 분명히 똑같이 허용하기로 결정했기 때문에 "I"부터 "N"으로 시작하는 모든 변수는 기본적으로 정수가되고 다른 모든 변수는 실수 (부동 소수점)가됩니다. 그것을 놓친 사람들을 위해, 이것은 오래된 농담의 근원입니다.

대부분의 사람들은 그것을 바꿀 이유가 거의없는 것 같습니다. 널리 알려져 있고 이해되며 간결합니다. 때때로 당신은 어떤 정신병자가 쓴 것을보고 다음과 같은 것의 장점이 있다고 생각합니다.

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;

다행히이 그래도 꽤 드문, 대부분의 스타일 가이드는 이제 긴 설명 변수 이름 동안 지적 할 수 유용합니다, 당신이 하지 않는 변수의 범위는 선이나 코드의 두 가지입니다 항상 특히이 같은 뭔가를, 그들이 필요 .


13
+1 나는 여기서 수학 상관 관계에 대해 생각하지 않았습니다. 이것은 흥미로운 실현이었습니다.
Casey Patton

79
어떤 사람들이 스타일이라고 상상하는 정신병에 기여한 것에 대해 +1.
Crashworks

2
그렇다면 왜 수학에서 i와 j가 첨자로 사용됩니까? 나는이 사용이 FORTRAN보다 먼저 생각합니다 :-) Knuth가 알고 있다고 확신합니다 ...
Guy Sirton

34
인덱스위한 'i'를 @Guy, j는 다음 문자는 난 후
마틴 베켓

3
Jerry가 언급 한 것처럼 i와 j는 대부분의 경우에 좋거나 더 좋습니다. 더 큰 문제는 전체 화면을 한 화면에서보고 이해할 수없는 너무 큰 루프입니다. 더 간결 해지려면 리팩토링해야합니다.
Craig

64

i - 인덱스.

인덱싱 루프 반복에 사용되는 임시 변수입니다. 이미을 가지고 있다면 , 등으로 i가는 것보다 더 자연스러운 것은 무엇 입니까?jk

그러한 맥락 idx에서 종종 사용됩니다.

짧고 간단하며 변수 이름과 마찬가지로 변수 사용법을 정확하게 보여줍니다.


35
ijk = "농담이야" :-)
Mahmoud Hossam 2016 년

2
당신은 참조를 인용 할 수 있습니까?
루이스리스

23
원한다면 저를 참고로 인용 할 수 있습니다.
Captain Sensible

1
어쩌면 루프에서 액세스하는 배열에 문자 그대로 색인 (첨자)이라고 덧붙일 가치가 있습니다. 항상 그런 것은 아니지만 인터랙션에 대한 인덱스로 보든 아니든 일반적인 루프 클래스에서 더 넓은 루프 클래스로 일반화하는 것이 여전히 편리합니다. BTW-개인적인 기이함-나에게 "인덱스"는 메모리의 키-대 첨자 사전 / 반전 된 테이블을 포함하여 "데이터베이스 인덱스"와 같은 것을 암시하는 경향이 있으므로 모호성을 피하기 위해 "인덱스"보다는 "첨자"를 선호합니다. 그러나 나는 여전히 i루프를 사용 합니다.
Steve314

3
당신의 생각의 기차에서 i반복자를 의미 할 수도 있습니다.
totymedli

39

FORTRAN i에서 정수 유형의 기본값은 첫 번째 문자입니다. 암시 적 정수 유형의 전체 범위는 i~로 시작하는 문자 n였습니다. 3 차원 루프 작업을 통해 우리 ij, 및을 얻게되었습니다 k. 추가 치수에 대해 패턴이 계속되었습니다. 마찬가지로 'x', 'y'및 'z'는 실수가 필요한 루프 변수에 사용되는 부동 소수점으로 기본 설정되었습니다.

으로 litleadv노트, i또한 인덱스에 대한 최소한의 수축이다.

이러한 변수를 로컬에서 사용하면 더 설명적인 이름을 사용하지 않는 문제는 보이지 않습니다.


단일 루프의 경우 동의하지만 루프를 포함하는 루프의 경우 좀 더 설명이 좋습니다.
Edward Strange

1
궁극적으로 답은 관성 입니다. 나는 1973 년 WATFOR (워털루 FORTRAN)와 함께 일을 시작하고 ... 나는 아직도 2011 년을하고 있어요
피터 로웰

1
@Crazy Eddie : 루프에 많은 기능이 포함되어 있다면 동의합니다. 그러나 밀접하게 중첩 된 루프의 경우 코드 길이는 n + 1 또는 2n + 1 정도 여야합니다. 여기서 n은 차원 수입니다. 이 경우 변수 이름이 길수록 가독성이 떨어질 수 있습니다.
BillThor

11
"For Fortran"의 +1은 전통이 시작된 방식이기 때문입니다. Fortran을 좋아하는지 아닌지는 중요하지 않습니다.
artem

34

나는 그것이 Summation 에서 온다고 믿는다 .

요약


3
흥미 롭습니다! 이것은 FORTRAN보다 이전이지만 CS의 맥락에서?
kprobst

3
Backus는 수학 석사를 가지고 있기 때문에 논리적으로 보입니다.
dbasnett

9
대부분의 초기 CS 천재는 수학이나 전기 공학에 종사했으며 광범위한 수학이 필요했습니다. 수학과 컴퓨터가 논리적으로 지향되기 때문에 오늘날에도 평균 "컴퓨터 대단하다"는 평균 이상의 수학 능력을 가지고 있습니다.
corsiKa

8

나는 몇 년 전 계산 교수 이론을 제외하고는 그 기원이 수학적 합산 표기법에 의한 것이라고 들었습니다. i, j, k는 일반적으로 정수 반복 변수로 사용되었으며 계산 이론 (물론 주로 수학에 적용됨)의 초기 텍스트에서 이전되었습니다. 분명히 Knuth et al. 이것을 백업합니다.

x, y, z 부동 소수점 반복자로서 물리학에서 정수를 소스 코드로 변환하는 물리학 연구에서 Fortran의 인기가 분명히 나타났습니다 (통합은 일반적으로 공간 경계를 넘어 서기 때문에 ...

나는 이것을 뒷받침 할 언급이 없지만, 내가 말했듯이, 그것은 상당히 오래된 교수로부터 왔으며 많은 의미가있는 것 같습니다.

도움이 되었기를 바랍니다


6

수학에서 i, j, k는 요약 및 행렬 요소 (행 및 열 j)의 인덱스를 나타내는 데 사용됩니다. 수학 표기법에서 일부 문자는 다른 문자보다 특정 의미로 자주 사용되는 경향이 있습니다 (예 : 상수의 경우 a, b, c, 함수의 경우 f, g, h, 변수 또는 좌표의 경우 x, y, z, i, j, 인덱스의 경우 k. 적어도 이것이 내가 학교에서 취한 수학에서 기억하는 것입니다.

어쩌면이 표기법은 많은 컴퓨터 과학자들이 수학자이거나 적어도 강력한 수학적 배경을 가지고 있었기 때문에 컴퓨팅으로 옮겨 졌을 것입니다.


3

i == 반복자 또는 색인

루프는 일반적으로 알려진 인덱스 단계를 반복하거나 순회하기 때문에 항상 'i'를 이해하는 것이 좋습니다. 중첩 루프가 종종 필요하기 때문에 문자 'j'와 'k'가 잘 따르며 알파벳에서 해당 패턴을 따르기 때문에 'j'== 두 번째 색인과 'k'== 세 번째 색인을 본능적으로 알 것입니다. 또한이 표준 규칙을 따르는 많은 사람들이 'k'루프에 'j'및 'i'루프가 줄 바꿈을한다고 가정 할 수 있습니다.


1

i, j, k는 직교 좌표계에서 사용됩니다. 동일한 시스템에서 축을 나타내고 항상 변수로 사용되는 x 및 y와 비교하여 i, j 및 k도 거기에서 왔다고 말할 수 있습니다.


1

"i"는 색인 용입니다.

한 글자만으로도 시선을 쉽게 스캔 할 수 있습니다. 루프와 같은 일반적인 경우 인덱스의 단일 문자가 이상적입니다. 협약으로 인해 "i"가 무엇을 의미하는지에 대해서는 혼동이 없습니다.


0

프로그래밍을 시작했을 때 Dartmouth BASIC은 새로운 것이 었습니다. 당시이 언어와 다른 언어의 모든 변수는 단일 문자였습니다. FORTRAN 변수 이름 지정 규칙과 한 문자 만 입력하는 것이 훨씬 쉽고 사실 프로그래머와 교사의 이해가 더 쉽다는 사실을 덧붙입니다. 잘 모르겠지만 좋은 소리입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.