Мой коллега и я только что вступили в дебаты - это возродило воспоминания об университете.
В частности, один из моих преподавателей всегда писал его для таких циклов:
for(int i = 0; i != max; i++){ ... }
Что мне кажется неправильным, потому что у него есть потенциал, чтобы повесить вашу программу в бесконечный цикл, если вы случайно меняете, мой коллега согласен со мной.
Насколько я знаю, наиболее распространенным способом написания петель является:
for(int i = 0 ; i < max; i++){ ... }
Итак, каковы плюсы и минусы каждого подхода?
Если переменная никогда не мутируется в цикле, и вы увеличиваете на значение, которое гарантировано будет достигнуто с вашего начального значения (в этом случае 10), то обе циклы эквивалентны.
Если вы решите пропустить значения во время фазы инкремента, или вам не гарантировано точно достичь условия терминала, тогда форма !=
Приведет к бесконечному циклу.
Пример:
for(int i = 0; i < 10; i += 3) { } // will stop after four iterations
for(int i = 0; i != 10; i += 3) { } // i will exceed 10, and will *not* stop
Общая конвенция всегда заключалась в использовании ограниченных неравенств в отличие от строгих неравенств при решении цикла; то есть одна петля, когда они находятся ниже определенного значения, а не когда они не имеют определенного значения.
Также хорошо оставаться ясным и понятным относительно того, что вы повторяете, и каковы ваши конечные условия. Если вы укажете a !=
, Следующий человек, читающий код, предположит, что вы просто не хотите, чтобы этот номер был частью следующего фрагмента итерации, когда намерение действительно было до него, но не включено.
Ясность здесь важна.
Расскажите своему другу: умный человек знает, что помидор - это плод, а не овощ, мудрый человек знает, что вы не ставите помидор в фруктовый салат.
Точка: да, технически он может написать это for(int я = 0; я != max; i++){... }
но если другой программист прочитает это, скорее всего, они будут подвергать сомнению причину. Держите его простым и последовательным.
как уже упоминалось: если значение изменяется внутри цикла for, вы можете завершить бесконечный цикл -don.
1) Используя первый цикл, представьте, что произойдет, если в какой-то момент внутри цикла вы добавите someting в i
чтобы i > max
. У тебя просто огромная петля.
Конечно, вы действительно можете выполнить цикл до тех пор, пока i != max
но в этом случае while(i != max)
легче читать.
Единственный способ, с которым вам хорошо пойти в первом цикле, - это если вы можете как-то гарантировать, что i
никогда не превышу max
.
2) Второй цикл и более простой for
чтения цикл.
3) Что делать, если вы хотите установить max
? вы должны править i != max + 1; i++
i != max + 1; i++
в этом случае моя вторая точка удерживается, 2-й цикл легче читать.