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

#c# #if-statement

#c# #if-оператор

Вопрос:

Например, предположим, что следующий код:

 foreach(Car car in Cars)
{
    if(car.Damaged)
       LogWarning();
    else
       LogInfo();
}
  

Лучше ли делать:

 foreach(Car car in Cars)
{
    if(car.Damaged)
    {
       LogWarning();
       continue;
    }

       LogInfo();
}
  

Комментарии:

1. Держу пари, что через 2 недели после написания мерзости, которая является вашим вторым примером (в правильности которого я даже не уверен), вы не поймете, что он делает. Напишите код для чтения и оптимизируйте позже, когда выясните, что действительно медленно.

2. Там отсутствуют некоторые фигурные скобки. В настоящее время LogInfo() никогда не вызывается во втором примере.

3. @drdwilcox — На случай, если вам интересно, я этого не писал. Это псевдокод, но у меня есть аналогичный код в первом примере, но рефакторинг профессиональный! говорит, что я могу сгладить его. Вот почему я спросил. Не нужно быть грубым.

4. @Marc — LogInfo не следует вызывать. Если есть предупреждение, оно должно просто перейти к следующему автомобилю, а не регистрировать информацию. Я добавил недостающие фигурные скобки.

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

Ответ №1:

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

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

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

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

Код предназначен не только для компилятора. Это тоже для человека, и человек должен уметь читать это и поддерживать.

Ответ №2:

При хорошем компиляторе. Это приведет к тому же. Итак, вы хотите знать, хорош компилятор или нет. Лучший способ — посмотреть на скомпилированный код и запустить анализ производительности, если создаются две разные вещи.