Продолжить цикл Внутри оператора if и использовать отрицание оператора if внутри цикла
Например, давайте рассмотрим следующие 2 кода:
for (i = 0; i < 1000; i++)
{
if ( i % 2 != 0)
{
continue;
}
else
{
...
}
}
а также
for (i = 0; i < 1000; i++)
{
if (i % 2 == 0)
{
...
}
}
Оба приведут к одному и тому же результату. Так какой из них использовать? Какой из них лучше? Есть ли существенные различия в производительности между этими двумя? Давайте посмотрим, что вы, ребята, видите по этому поводу. Мне нравятся обсуждения, которые я вижу здесь об этих вещах. Это может привести к лучшему написанию кода и лучшему времени выполнения. Я разместил этот вопрос, потому что я не нашел ответа на него. Я могу опубликовать еще один, как это в будущем, если я не нашел ответ на него.
PS Какова цель использования продолжения внутри цикла, когда вы можете обходиться без него?
3 ответа
В этом конкретном примере? Там нет цели в использовании continue
бы то ни было.
Как вы упомянули, оба примера кода дают одинаковые результаты. И ни один не будет заметно быстрее, чем другой.
Принятое вами решение о том, какое из них выбрать, должно основываться на удобочитаемости и ясности, а не на какой-то ошибочной попытке "оптимизации". Имея это в виду, второе гораздо яснее. Я бы серьезно усомнился в программировании кого-то, кто первым использовал реальную базу кода.
В качестве основного руководства, никогда не используйте if-else
когда один if
Сделаю. В этом случае вы сравниваете !=
а затем найти противоположность этому с else
утверждение - это почти как сказать !(!=)
, который производит двойной отрицательный. Очень трудно читать или понимать. В общем, вы должны попытаться оценить положительные условия в if
Заявление, а не отрицательные, чтобы предотвратить именно это.
И на самом деле нет причин размещать дополнительные вопросы, похожие на этот. Все ответы будут одинаковыми. Игнорируйте любую возможную разницу в производительности (если она вообще существует, что весьма маловероятно, учитывая оптимизирующий компилятор) и сосредоточьтесь на том, какая версия наиболее важна для вас как для человека, который должен ее читать. Пожалуйста, игнорируйте любого, кто дает вам советы об обратном.
Я бы определенно не рассматривал первый вариант, так как, по моему мнению, он добавляет ненужные пути к потоку. Я не думаю, что это приведет к лучшим результатам с точки зрения производительности, но если вы хотите убедиться, что вы можете изучить код IL.
Не будет достаточной разницы, чтобы оправдать использование уродливой формы.
Лучше, чем любой в этом конкретном случае будет
For(i = 0; i < 1000; i+=2)
{
...
}
поскольку нет никакой необходимости в проверке делимости вообще.