LINUX.ORG.RU

Стандарт оказался неудобным, i j

 ,


0

1

Во всех примерах когда нужно использовать два вложенных цикла используют изначально букву «i», а во внутреннем - «j». Я поступаю также. У меня одного возникают проблемы с этими буквами в большом коде, когда перепутав буквы местами, просто не замечаю этого??? А какие буквы используете вы? И да, пишу на C++ / java , но кажется это неважно.

★★★

Последнее исправление: abs (всего исправлений: 1)
Ответ на: комментарий от abs

Тогда к ЕГЭ готовься лучше и меньше пиши программ. Вот пойдёшь на первый курс и будешь писать на делфях, шарпе или плюсах в Windows, короче на том, что в твоём ВУЗе будут преподавать. Но этого может и не быть - сдашь ЕГЭ плохо и выдадут тебе автомат и сапоги - пойдёшь Родину охранять.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Я тут недавно создал тему монетизации андроид приложения, для того что бы удалится из Украины.)

abs ★★★
() автор топика

Использую пару i, j только в математических операциях (с матрицами, например). А так стараюсь дать осмысленные названия переменным, будь то row/column, если это таблица, например

prostoroma
()

За однобуквенные переменные надо расстреливать. Называю их в зависимости от контекста.

NeverLoved ★★★★★
()
Ответ на: комментарий от NeverLoved

За однобуквенные переменные надо расстреливать. Называю их в зависимости от контекста.

Хабр.. ну ладно, с ним все понятно. StackOverflow используют i,j в циклах. И посмотрите выше, там уже предлагали осмысленные переменные.

abs ★★★
() автор топика
Ответ на: комментарий от NeXTSTEP

Настрой свой редактор так, чтобы он раскрашивал разные переменные разными цветами.

Как мне кажется - это очень тяжело для восприятия

prostoroma
()
Ответ на: комментарий от abs

Я раньше стиль Олмана с пробелами использовал, сейчас на GNU перебрался, K&R плох тем, что открывающая скобка сразу, а потом на следующей строке код портит структуру программы. Вот для сравнения:

if (a>b){
    cout<<"a>b"<<endl;
}
else{
    cout<<"Условие a>b неверно"<<endl;
}
if (a>b)
{
    cout<<"a>b"<<endl;
}
else
{
    cout<<"Условие a>b неверно"<<endl;
}
if (a>b)
  {
    cout<<"a>b"<<endl;
  }
else
  {
    cout<<"Условие a>b неверно"<<endl;
  }
Когда код большой и много вложений, то во втором и третьем случае проще искать парную скобку глазами (хотя сейчас все IDE и редакторы имеют подсветку парных скобок, но это не так быстро, как глазами глянуть). При этом во втором случае скобки не путаются на одной вертикальной линии с вышестоящим кодом, таким образом достаточно искать взгядом по вертикали, выкидывая взглядом те строки, у которых первые 2 пробела есть какой-то символ.

peregrine ★★★★★
()
Ответ на: комментарий от prostoroma

Люди со StackOverflow, хотел сказать?

Ну да, использовал метонимию...

abs ★★★
() автор топика
Ответ на: комментарий от prostoroma

Плюсую. Отвратительно, когда в редакторе более 20 цветов подсветки - радуга получается, я обычно 16 цветов использую.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

то во втором и третьем случае проще искать парную скобку глазами

Да.. это конечно гораздо удобнее. Но как мне кажется количество полезного кода на мониторе важнее этого. Меньше придется скроллить.

abs ★★★
() автор топика
Ответ на: комментарий от peregrine

У вас там до ЕГЭ не додумались пока?

Несколько лет как ЗНО (внешний независимое оценивание )

abs ★★★
() автор топика
Ответ на: комментарий от NeverLoved

Многобуквенные счётчики в циклах? За это надо живьём программиста хоронить. Ещё назовут их counter1, counter2, counter3 и не напишут комментариев к намудрённому циклу, что и почему.

peregrine ★★★★★
()

Раньше во всяких досах использовал m и n, а теперь шрифты позволяют различать i и j без проблем.

fenris ★★★★★
()
Ответ на: комментарий от Kuzy

Зачем тебе i, j, юзай foreach.

Может быть, в будущем. С привычкой трудно расстаться. И более того, бывают циклы которые перебирают в обратную сторону, или ещё как-то.

abs ★★★
() автор топика
Ответ на: комментарий от abs

Мышка с быстрой прокруткой решает эту проблему. Всё равно весь код, что на экране помешается со всеми названиями переменных и синтаксисом в голове тяжело удерживать, я там алгоритм держу (хотя в особо сложном случае для больших алгоритмов использую бумагу, для краткой записи самого алгоритма и пометок на детали, которые легко упустить из виду, но их упущение может привести к фатальным последствиям) и ближайшую конструкцию(блок, функцию).

peregrine ★★★★★
()
Ответ на: комментарий от abs

Плохая привычка.

И более того, бывают циклы которые перебирают в обратную сторону, или ещё как-то.

Везде где можно использовать foreach нужно использовать foreach. Во всех остальных for. Если ты видишь в коде foreach, значит в теле гарантированно нет никаких махинаций со счетчиками. Проще читать.

Kuzy ★★★
()
Ответ на: комментарий от abs

Но как мне кажется количество полезного кода на мониторе важнее этого. Меньше придется скроллить.

GNU стиль плох абсолютно со всех точек зрения - его и писать неудобно, и читать ещё неудобнее. Самый дерьмовый стиль из всех распространнёных. K&R вариации самые удобные, нет смысла искать альтернативы.

mashina ★★★★★
()

i и j. Периодически ошибаюсь, но не заметить, конечно же, в итоге сложно. Тут подумалось, ни разу в for циклах не использовал переменные с другими именами. (:

Insomnium ★★★★
()
Ответ на: комментарий от peregrine

std::for_each, но таки да, нужна дополнительная функция и с простыми массивами не прокатит.

ziemin ★★
()

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

mm3 ★★★
()
Ответ на: комментарий от peregrine

Пацаны угорают не по синтаксису, а по семантике.

Kuzy ★★★
()

я использую j k

У меня одного возникают проблемы с этими буквами в большом коде, когда перепутав буквы местами, просто не замечаю этого???

яхз. Использую обычно i как «индекс».

emulek
()
Ответ на: комментарий от rezedent12

Первый раз узнаю о таком стандарте. Я то обычно использую в качестве счётчиков циклов переменные a, b ...

детка, ты в каком классе?

emulek
()
Ответ на: комментарий от DeVliegendeHollander

Когда что-либо используется много-много лет, то об этом говорят «стандарт де-факто». Нигде не записано кровью, что i и j непременно должны быть счётчиками цикла, тем не менее, почти все используют именно эти идентификаторы.

все остальные буквы заняты.

l не рекомендуется, поскольку похож и на 1

это «длинна»

вполне нормально использовать m и n

это константы и/или пределы. Например «матрица размера m×n».

emulek
()
Ответ на: комментарий от ziemin

ИМХО для циклов с большими телами следует использовать осмысленные имена.

тогда у тебя вся программа будет состоять из одних имён.

emulek
()
Ответ на: комментарий от abs

В Qt creator были случаи когда путался и не мог по табам понять что во что вложено.

открой для себя складки кода в скобках.

emulek
()

можно ещё I и J в верхнем регистре писать, тогда точно различие будет видно :)

Harald ★★★★★
()
Ответ на: комментарий от ziemin

тогда у тебя вся программа будет состоять из одних имён.

А из чего она должна состоять?

у меня в основном из алгоритмов код состоит. Я считаю, что код в котором я Over9000 раз напоминаю, где у меня строка, а где столбец, а где счётчик циклов — идиотизм.

emulek
()

Последнее время предпочитаю не делать вложенных циклов. Точнее не использовать структур данных с двойной индексацией. Если задача не позволяет, то можно внутренний вынести в отдельную функцию.

amaora ★★
()
Ответ на: комментарий от peregrine

да, с индексом лучше. Но пусть будет, мне не жалко. Единственное, что плохо, так это когда везде и всюду, где надо, и где не надо, пихают какую-то хрень.

emulek
()
Ответ на: комментарий от amaora

Точнее не использовать структур данных с двойной индексацией.

ИМХО идиотизм. Если задача описывается матрицей, то почему не использовать матрицу?

emulek
()
Ответ на: комментарий от emulek

Во, это очень правильно. Всему своё место. Может на перемудрёных циклах и удобно так делать, но лучше избегать такие циклы, если есть возможность.

peregrine ★★★★★
()
Ответ на: комментарий от abs

В любом случае пробема надумана и яйца выеденного не стоит. В твоих личных проектах ты — хозяин-барин. Хоть i-j, хоть foo-bar. В чужих, будь добр прижерживаться coding-style. И весь сказ.

beastie ★★★★★
()
Ответ на: комментарий от emulek

открой для себя складки кода в скобках.

1) Умею. 2) Как это вообще к моей проблеме относится? 3) В Qr creator с этим проблемы.

abs ★★★
() автор топика
Ответ на: комментарий от beastie

пробема надумана и яйца выеденного не стоит

Я тоже так думал, но проблема более серьезная чем кажется. описанный мной случай это показывает. И это сейчас привело к 3-5 минутной ошибке, но если подумать сколько мелких моментов тратил мозг на попытки понять где в поле периферийного зрение i или j

abs ★★★
() автор топика
Ответ на: комментарий от abs

Как это вообще к моей проблеме относится?

а кто «не мог по табам понять что во что вложено»?

В Qr creator с этим проблемы.

проблемы негров... У меня vim, он не глючит.

emulek
()
Ответ на: комментарий от abs

Я тоже так думал, но проблема более серьезная чем кажется. описанный мной случай это показывает. И это сейчас привело к 3-5 минутной ошибке, но если подумать сколько мелких моментов тратил мозг на попытки понять где в поле периферийного зрение i или j

если-бы ты не копипастил, а переписал-бы, то и код стал-бы более логичным, и таких глупых ошибок не было бы.

emulek
()
Ответ на: комментарий от abs

3-5 минутной ошибке

И эти люди нам жарещают использвоат i-j! ;) 3-5 минут — не смеши мои тапочки! Банальная невнимательность. Чашака кофе и минута медитации над кодом. (Резиновый утёнок тоже некоторым помогает.)

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от abs

Знаю человека который тоже копипастит код, использует короткие имена, не пытается выделить общий код в какой-то слой. И в результате у него непрерывно идет ловля багов.

amaora ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.