#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:
При хорошем компиляторе. Это приведет к тому же. Итак, вы хотите знать, хорош компилятор или нет. Лучший способ — посмотреть на скомпилированный код и запустить анализ производительности, если создаются две разные вещи.