Продолжить цикл Внутри оператора if против использования оператора if внутри цикла. - PullRequest
4 голосов
/ 14 мая 2011

Например, давайте рассмотрим следующие 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 ]

5 голосов
/ 14 мая 2011

В этом конкретном примере?Нет никакого смысла в использовании continue.

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

Принятое вами решение о том, какой из них выбрать, должно основываться на удобочитаемости и ясности , а не на какой-то ошибочной попытке "оптимизации".Имея это в виду, второе становится намного более ясным.Я бы серьезно усомнился в программировании тех, кто первым использовал реальную кодовую базу.

В качестве основного руководства никогда не используйте if-else, когда подойдет один if.В этом случае вы сравниваете !=, а затем обнаруживаете противоположное этому с помощью оператора else - это почти то же самое, что сказать !(!=), который дает двойной отрицательный результат.Очень трудно читать или понимать.В общем, вы должны попытаться оценить положительные условия в выражении if, а не отрицательные, чтобы предотвратить именно это.

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

0 голосов
/ 14 мая 2011

Разницы не будет достаточно, чтобы оправдать использование уродливой формы.

Лучше, чем любое из них в этом конкретном случае, будет

For(i = 0; i < 1000; i+=2)
{
    ...    
}

, поскольку вообще не требуется проверка делимости.

0 голосов
/ 14 мая 2011

Я бы определенно не рассматривал первый вариант, так как, по моему мнению, он добавляет ненужные пути кода в поток. Я не думаю, что это приведет к лучшим результатам с точки зрения производительности, но если вы хотите убедиться, что вы можете изучить код IL.

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