В некотором коде, который я пишу прямо сейчас, у меня есть что-то вроде этого:
if (uncommon_condition) {
do_something_simple();
} else {
do();
something();
long();
and();
complicated();
}
Часть меня думает: «Все хорошо, как написано. Сначала должны идти простые дела, а затем более сложные дела». Но другая часть говорит: «Нет! else
Код должен идти под if
, потому что if
предназначен для работы с необычными случаями и else
для решения всех других случаев». Что является правильным или предпочтительным?
coding-style
ЭМБЛЕМА
источник
источник
Ответы:
Порядок по их вероятности быть выполненным. Наиболее распространенные, наиболее вероятные и т. Д. Условия должны идти первыми.
«Сложность обращения с ними» должна решаться с помощью структуры кода, абстракции и т. Д. В примере блок else может быть реорганизован для вызова одного метода. Вы хотите, чтобы ваши
if
предложения были на одном абстрактном уровне.источник
not
. Лично я бы сконцентрировался на уходе отnot
условий. Доказано, что они вызывают большую когнитивную нагрузку для понимания, чем «положительные» условия, и наносят ущерб читабельности / понятности кода. Я склонен использовать их только в защитных заявлениях.doesNotAllowxxFiles = false
. Достаточно плохо, но потом сделайте этоif(! doesNotAllowxxFiles)
Попробуйте улучшить читаемость. Одним из способов является размещение более длинного блока кода в другой части.
более читабельно, чем
источник
Нет фиксированного правила как такового, я слышал об использовании, но я следую так
Но если оба имеют одну и ту же функцию с разными свойствами, лучше сначала перейти к необычному, чем к обычному, чтобы можно было сохранить одну инструкцию.
Для приведенного выше кода ассемблерный код будет примерно таким:
Если условие внутри if истинно, то поток равен 1-> 2 (4 операции).
Если условие внутри if ложно, то поток равен 1-> 3 (3 операции).
Поэтому лучше помещать необычные или редко встречающиеся события, если они являются частью, а нормальное состояние - в другое, чтобы мы могли сохранять одну инструкцию каждый раз ;-)
источник
Я обнаружил, что совершенно противоположный шаблон облегчает чтение кода и уменьшает или исключает вложенные операторы if. Я называю это «перчаткой». (В рассказе истории перчатка должна представлять собой серию задач, которые должны быть успешно решены до того, как будет завершено окончательное задание.) Обрабатывая вначале свои крайние случаи , вы позволяете основной части вашего кода быть чистым и лаконичным:
источник
Для меня это больше об условиях, чем о сложности кода, который они выполняют. Вы должны упорядочить условия так, чтобы сначала были пойманы необычные условия, а затем более распространенные. Кроме того, если код else действительно длинный и сложный, я, вероятно, сделаю для этого подпрограмму, чтобы условная часть была очевидна для читателя.
источник
У меня нет фиксированного правила, но обычно я следую этому - во-первых, рассмотрим, где есть пропущенный шаблон проектирования, который будет учитывать это. Если нет, я пишу это так, чтобы условие в if было наиболее понятным. То есть избегать двойных негативов и тому подобного.
источник
Что касается таких сценариев, то здесь нет правила большого пальца. Но, возможно, мы можем следовать, чтобы написать положительный или наиболее вероятный код в блоке if и опустить в блоке else или в случаях по умолчанию.
источник