В написании кода есть намного больше проблем в стиле написания, чем это.
Причем, сука, i в цикле это наверное единственное на чем сошлись разработчики во всем мире, и понятно везде.
по нормальному нужно называть переменные в сооиветствии с их контекстом по смыслу
к примеру если перебираешь массив $myOrders
использовать не $i $v а $myOrderIndex $myOrderValue
иначе при добавлении циклов внутрь этого,
получается каша из букв и легко перепутать где чей индекс, читаемость кода падает, появляются ошибки
Переменные i, j, k - тоже вполне себе названы в соответствие со смыслом и контекстом:
i - счетчик цикла первого уровня
j - счетчик цикла второго уровня
k - счетчик цикла третьего уровня
Если вам потребовалось больше трех уровней вложенности - скорее всего, вы что-то делаете не так :)
Использование длинных названий для счетчиков ведет к раздуванию кода что напротив, только снижает читаемость. Сравните:
avrage = (myOrder[i - 1] + myOrder[i] + myOrder[i + 1]) / 3;
avrage = (myOrder[myOrderIndex - 1] + myOrder[myOrderIndex] + myOrder[myOrderIndex + 1]) / 3;
А переменные типа v - да, за это руки надо отрывать. Я допускаю использования неконкретных идентификаторов типа value, item, row только в циклах из пары строк, где путаницы возникнуть не может.
Это только если один одномерный массив крутится. А если несколько, двумерных, да ещё и с транспонированием и/или индекс от индекса.
Счетчик - это переменная, последовательно принимающая значения от 0 до n. Если с ней что-то происходит еще - значит, это уже не счетчик, соответственно, и название должно быть иное.
Если появляется спагетти из более чем двух вложенных циклов, то пора задуматься, так как что-то идёт не так.
это же не тот случай, когда обычные переменные называют "а", "b" и ты фиг поймешь, что это именно такое.А что именно я "фиг пойму"? Ты, по сути, объявляешь эту "а" в for, а после используешь её как индекс. Как тут можно не понять, что она делает - хз.
Для жуниоров наверное нормально.
Понять можно что угодно. Но читать удобнее стандартные обозначения. Что джун, что сеньор будут некоторое время тупить над переменной а. Причем сеньор даже дольше, так как будет искать скрытый смысл.
если у тебя два вложенных цикла, и в обоих переменную нужно назвать index, значит у тебя проблемы с архитектурой, а ты ковнокодер.
for k = 1 to n
for i = 1 to n
for j = 1 to n
W[i][j] = min(W[i][j], W[i][k] + W[k][j])
Давай, перепиши алгоритм Флойда, например, с логически обоснованными названиями счетчиков.
почитал, что за алгоритм.
ну вот тебе пример, как это должно на самом деле выглядеть:
for step = 1 to apex_number
for row = 1 to apex_number
for col = 1 to apex_number
Distance[row][col] = min(Distance[row][col], Distance[row][step] + Distance[step][col])
так мы хоть видим по row и col, что имеем дело с матрицей. step говорит о шаге вычисления. apex_number намекает на количество вершин. а вычисляем мы что? дистанцию
Можешь объяснить, почему мы используем step в Distance[row][step] + Distance[step][col]? Это как-то исходит из названия переменной step? row и col понятно, но это стандартное решение. А вот step здесь прикручен условно и ни разу не понятнее и не более обусловлен, чем собственно переменные в виде i, j, k. Что Distance[row][step], что Distance[row][i] выглядит одинаково бессмысленно, вне контекста знания алгоритма как такового.
Вот в этом то и проблема. Смысла никакого городить подобный бред нет, учитывая, что эта переменная используется только в этом крошечном кусочке кода. Если есть такая огромная необходимость обозначить, что переменная символизирует, лучше в данном случае сделать это с помощью комментариев, а не пытаться сделать самодокументирующийся код ради самого факта или какой-то эстетики. Одно дело, когда переменная используется как нагруженная каким-то нестандартным смыслом, и совсем другое, когда речь об вот таких бессмысленных в контексте понимания программы счетчиках.
Неужели floid_calculation_stage привнесет какую-то новую/большую информацию об алгоритме, нежели короткое и всем понятное i?
конечно. i не говорит вообще ни о чем. это просто одна буква. что это? индекс? номер? ток? маленькое я? не используйте однобуквенные переменные.
i в цикле это index, очевидно. Если бы речь шла не о локальной переменной, я бы согласился с вами, но здесь это просто просто не нужно. Эта переменная не будет использована нигде кроме этого кусочка кода, и здесь ее смысл очевиден всем.
Единственная причина, по которой это может быть оправдано - использование полного написания по типу index (что не несет никакой дополнительной смысловой нагрузки) - следование общему стилю написания.
ебать! кто писал этот говнокод? надеюсь, это пример не из реального проекта... очень похоже на высеры википедии. что такое W? что такое n? Как, блядть, ревьюить этот код? по каким признакам я должен понять, что это именно алгоритм Флойда?
IT-юмор
5.6K постов52.5K подписчиков
Правила сообщества
Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору