Чому більшість із нас використовує «я» як змінну лічильника циклу?


126

Хто-небудь замислювався над тим, чому так багато з нас повторюють цю ж схему, використовуючи однакові імена змінних?

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

Здається , найбільше коду я коли - небудь дивився на використань i, j, kі так далі , як ітераційних змінних.

Я вважаю, що я взяв це звідкись, але мені цікаво, чому це так поширено в розробці програмного забезпечення. Це щось, що ми всі зібрали з C, чи щось подібне?

Просто свербіж у мене був деякий час у потилиці.


4
Вже запитав довгий час тому на SO; можливо , ті повинні бути перенесені сюди: stackoverflow.com/questions/454303 / ... і stackoverflow.com/questions/4137785 / ...
BlueRaja - Денні Pflughoeft

8
Це повторне запитання, і я люблю цю відповідь. Через назву D ijk stra.
Vivart

2
Я завжди думав, що i, j і k взятий з D ijk stra
Крістіан Кьор

1
BTW: Я завжди використовую iijj,, kk...), щоб було легше знайти під час пошуку.
Сабунку

1
Що б ти ще використав?
Thorbjørn Ravn Andersen

Відповіді:


205

iі j, як правило, використовуються як підписки в досить багато математики протягом досить тривалого часу (наприклад, навіть у документах, що передують мовам вищого рівня, ви часто бачите речі типу "X i, j ", особливо в речах, таких як підсумок).

Коли вони розробляли Fortran, вони (мабуть) вирішили дозволити те саме, тому всі змінні, починаючи з "Я" через "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 Я не думав про математичну кореляцію тут. Це було цікавою реалізацією.
Кейсі Паттон

79
+1 за приписування психозу того, що деякі вважають стилем.
Crashworks

2
Гаразд - так чому я і j використовуються як підписки в математиці? Я думаю, що це використання передує FORTRAN :-) Я впевнений, що Кнут знає ...
Гай Сіртон,

34
@Guy 'i' - це індекс, j - наступна літера після i
Мартін Бекетт

3
i та j в більшості випадків прекрасні чи навіть кращі, як наголошував Джеррі. Більшою проблемою є петлі, настільки великі, що ви не можете побачити та зрозуміти все на одному екрані. Їх потрібно реконструювати, щоб вони були більш короткими.
Крейг

64

i - індекс.

Тимчасова змінна, яка використовується для індексації циклу ітерації. Якщо у вас вже є i, що більш природно , ніж ходити j, kі так далі?

У цьому контексті idxтакож часто використовується.

Короткий, простий і точно показує, яким є використання змінної, як має бути назва змінної.


35
ijk = "Я просто жартую". :-)
Махмуд Хоссам

2
ви можете навести посилання?
Луї Ріс

23
Ви можете цитувати мене як довідку, якщо хочете.
Капітан Чутливий

1
Можливо, варто додати, що це часто буквально індекс (індекс) в масив, який має доступ до циклу. Не завжди, але ви розглядаєте це як індекс інтеграції чи ні, все-таки зручно узагальнювати від загального класу циклу до більш широкого класу циклу. BTW - особиста химерність - для мене "індекс" має на увазі щось подібне до "індексу баз даних", у тому числі до пам'яті словників / інвертованих таблиць в пам'яті, тому я віддаю перевагу "індексу", а не "індексу", щоб уникнути неоднозначності. Але я все одно використовую iдля петель.
Steve314

3
У вашій думці думки також iможе бути ітератор.
totymedli

39

У FORTRAN iбула перша буква за замовчуванням до цілого типу. Повний спектр неявних цілих типів складався з букв iдо n. Робота з петлями для трьох вимірів у нас i, jі k. Шаблон продовжувався для додаткових розмірів. Аналогічно, "x", "y" і "z", які за замовчуванням є плаваючою точкою, коли використовуються для змінних циклу, для яких потрібні реальні числа.

Як litleadvзазначається, iце також мінімальне скорочення для індексу.

З огляду на локальне використання цих змінних, я не бачу проблеми з використанням більш описового імені.


Для одиночних циклів я згоден, але для циклів, що містять петлі, мені подобається трохи більше опису.
Edward Strange

1
Зрештою, відповідь - інерція . Я почав це робити з WATFOR (Waterloo FORTRAN) в 1973 році і ... Я все ще роблю це в 2011 році.
Пітер Роуелл,

1
@ Crazy Eddie: Якщо петлі містять багато функціональних можливостей, я погодився б. Але при щільно вкладених петлях довжина коду повинна бути в порядку n + 1 або 2n + 1, де n - кількість розмірів. У цьому випадку довші назви змінних можуть зменшити читабельність.
BillThor

11
+1 для "In Fortran", тому що саме так почалася ця традиція - не важливо, подобається вам Фортран чи ні.
Артем

34

Я вважаю, що це походить від підсумків :

Підсумовування


3
Цікаво! Це передує FORTRAN, але в контексті CS?
kprobst

3
Оскільки Бекус магістратури з математики, це здається логічним.
dbasnett

9
Більшість ранніх геніїв CS займалися математикою чи електротехнікою, що вимагало великої математики. Навіть сьогодні ваш середній "комп’ютерний ботанік", як правило, має середні математичні навички, тому що математика та комп'ютери настільки логічно орієнтовані.
corsiKa

8

Мені, вбік моєї теорії професора обчислень, мені сказали пару років тому, що походження походить від позначення математичного підсумовування. i, j, k зазвичай використовувались як цілі змінні ітерації, і це передавалося з ранніх текстів з теорії обчислень (що, звичайно, застосовується в першу чергу математикою). Мабуть, дивлячись на твори Кнут та ін. підтримує це.

x, y, z як ітеранти з плаваючою комою, очевидно, прийшли з популярністю Фортран у фізичних науках, від дослідників фізики, які перетворювали інтеграли у вихідний код (оскільки інтеграції зазвичай були за просторовими межами ... як x йде до 100 et cetera)

Я не маю посилання на це підкріплення, але, як я кажу, це було від досить старого професора і, здається, має багато сенсу.

Сподіваюся, це допомагає


6

Я думаю, що i, j, k використовуються в математиці для позначення індексів у підсумках та для матричних елементів (i для рядків та j для стовпців). У математичних позначеннях деякі літери, як правило, використовуються з конкретним значенням частіше, ніж інші, наприклад, a, b, c для констант, f, g, h для функцій, x, y, z для змінних або координат, i, j, k для показників. Принаймні, це я згадую з математики, яку я взяв у школі.

Можливо, це позначення було перенесено до обчислювальної техніки, оскільки на початку багато вчених-комп'ютерів були математиками або, принаймні, мали сильний математичний досвід.


3

i == ітератор або індекс

Моє розуміння завжди було «я» - це хороший вибір, оскільки петлі, як правило, для повторення або переходу з відомим кроком індексу. Літери 'j' і 'k' добре відповідають тому, що вкладені петлі часто потрібні, і більшість інстинктивно знає 'j' == другий індекс і 'k' == третій індекс, оскільки вони слідують цій схемі в алфавіті. Крім того, якщо багато хто дотримується цієї стандартної конвенції, можна з упевненістю припустити, що цикл 'k', ймовірно, має цикл 'j' і 'i', який обертає його.


1

i, j, k використовуються в декартовій системі координат. Порівнюючи з x і y, які представляють осі в одній і тій же системі і які завжди використовуються як змінні, можна сказати, що i, j і k також походять звідти.


1

"i" - це для індексу.

Одне письмо полегшує вашій оці сканувати рядок коду. Для чогось такого ж поширеного, як цикл, ідеальний один символ для індексу. Немає плутанини щодо того, що означає "я" завдяки конвенції.


0

Коли я почав програмувати, Dartmouth BASIC був новим. Всі змінні в цій та деяких інших мовах на той час були поодинокими символами. Додайте до цього умову іменування змінної FORTRAN і той факт, що набрати набагато простіше лише один символ та розуміння з боку старших програмістів та викладачів. Я не знаю, але це добре звучить.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.