Дело выглядит следующим образом: У вас есть логическое свойство FullScreenEnabled. Вы вводите какой-либо метод, и код в этом методе выполняется, если FullScreenEnabled имеет значение true. Какой из двух подходов ниже вы используете в повседневном программировании:
private bool FullScreenEnabled { get; set; }
// Check if FullScreenEnabled is false and return;
private void Case1()
{
if (FullScreenEnabled == false)
{
return;
}
// code to be executed goes here!
}
// Surround the code by an if statement.
private void Case2()
{
if (FullScreenEnabled)
{
// code to be executed goes here!
}
}





Ни один из подходов не был опубликован. Вы должны прочитать помощь при редактировании, чтобы убедиться, что код действительно появляется.
private void MyMethod(bool arg){
if (arg)
return;
//do stuff
};
(для голосования)
предпочитайте этот, так как вы получаете меньше отступов для остальной части вашего кода, и вам не нужно читать остальную часть метода, чтобы увидеть, есть ли больше логики ниже в случае с немедленным возвратом
private void MyMethod(bool arg){
if (!arg){
//do stuff
}
}
(для голосования)
Я обычно предпочитаю первую версию (выгрузка в начале метода). Это приводит к меньшей вложенности, что немного увеличивает читаемость. Если вы решите, что вам не нужно проверять условие в будущем, также проще удалить условие if в первой версии, особенно если у вас есть несколько таких проверок. Кроме того, это можно легко записать в одну строку: if (! FullScreenEnabled) return;
Это зависит от продолжительности и сложности метода. Если метод короткий, то вложение внутри if не является проблемой (и может быть более понятным). Если в методе много вложенных операторов, то немедленный возврат уменьшит количество необходимых отступов и может немного улучшить читаемость.
Речь идет о том, следует ли проверять положительный или отрицательный результат, т.е. возвращаться в начале метода, если условие не выполняется, или выполнять код только при выполнении условия. В коротком методе я бы выбрал второй случай, в долгом - первый. Я всегда выбираю ранний выход, когда нужно проверить несколько условий. Хотя на самом деле это не имеет значения.
Обратите внимание, однако, что в вашем примере это сравнение с false. Вместо этого вы должны написать! FullScreenEnabled. Делает код более читабельным.
if (!FullScreenEnabled)
throw new InvalidOperationException("Must be in fullscreen mode to do foo.");
Мои два цента, сколько это стоит.
В любом случае работает одинаково.
Однако, если вы запустите показатели покрытия кода для своих модульных тестов, if (!FullScreenEnabled) return; будет считаться отдельным блоком, и вам придется создать модульный тест, чтобы охватить его, чтобы достичь 100%.
Конечно, даже с другим подходом вы можете захотеть иметь модульный тест, который проверяет, что вы не выполняете свой код, когда FullScreenEnabled имеет значение false. Но если схитрить и не написать, все равно получишь 100%. :-)
Первый подход (с использованием охранная оговорка) масштабируется лучше по мере добавления большего количества случаев если. Проблема со вторым подходом состоит в том, что добавление дополнительных операторов если приведет к созданию кода, который демонстрирует стрелка анти-узор, где код начинает обозначаться стрелкой.
Есть очень хорошая статья, которая более подробно объясняет это ниже:
Я бы выбрал первый подход, я считаю его более читаемым, чем второй. в основном я думаю, что:
if (FullScreenEnabled == false) более читабелен, чем if (FullScreenEnabled).Однако я думаю, что здесь есть тонкая грань, которую не нужно пересекать, размещение оператора return слишком во многих местах в середине метода, как правило, делает его более сложным.
даже лучше, если ваш вопрос представляет собой опрос, опубликуйте ответы как варианты голосования (и отметьте их как сообщество, чтобы люди не обвиняли вас в охоте за кармой)