У меня есть метод, который проверяет определенные вещи и возвращает булевскую переменную на основе тех проверок. Это включает единственное ветвление, Если раздел, который проверяет приблизительно 5 условий в последовательность. Если какое-либо из тех условий возвратит true, то метод будет return true;
. Если ни одно из условий не возвратит true, то метод будет return false;
. Начиная с кода после, Если раздел будет только работать, если ни одно из условий не будет верно, затем тот код логически идентичен включению фактического оператора Else.
Таким образом, действительно ли это - лучшая идея на самом деле записать в операторе Else для этого вида ситуации?
Править
Оказывается, что мне была нужна информация, на которой условие на самом деле сместилось "истинное" для некоторых из них, таким образом, я изменил метод для возврата интервала с-1 представлением "ложной" ситуации. Логика все еще остается, если ни одно из условий не будет верно, то она возвратится-1. Так, у меня больше нет конденсируемой опции return (cond1 || cond2 || cond3 || cond4 || cond5);
, но я благодарю всех за то предложение также, так как я действительно не думал об этом (прежде всего, потому что cond3 является очень сложной проверкой вовлечения условия пересечение в средних точках двух пар объектов DateTime, таким образом, это выглядело бы ужасным). В то время как природа метода изменилась, природа этого вопроса не имеет, и все ответы все еще в основном применимы...
Код в настоящее время, чтобы перефразировать его и отключить весь посторонний код, который определяет cond1 через cond5...
if (cond1) { return 1; }
else if (cond2) { return 2; }
else if (cond3) { return 3; }
else if (cond4) { return 4; }
else if (cond5) { return 5; }
Я предпочитаю что-то подобное возврату точных значений.
static bool SomeFunc(string arg)
{
bool result = false;
if (arg.Length < 10)
{
result = true;
}
else if (arg.StartsWith("foo"))
{
result = true;
}
if (!result && arg.EndsWith("foo"))
{
result = true;
}
return result;
}
Это действительно вопрос стиля и того, что вы (и те, с кем работаете) считаете более ясным. В общем, я лично считаю структуру:
if( a )
someResult = doSomething();
else if( b )
someResult = doSomethingElse();
else
someResult = doSomethingAnyways();
return someResult;
более ясной, чем:
if( a )
return doSomething();
if( b )
return doSomethingElse();
return doSomethingAnyways();
Лично я обычно предпочитаю использовать ELSE, потому что я думаю, что это проясняет намерение. Если вы напишете
if (sensorScan()==ENEMY)
return FIRE_PHASERS;
else
return SEND_GREETING;
, читателю станет ясно, что вы имеете дело с двумя ветвями, исходящими из одного условия. Конечно, в таком тривиальном случае, когда каждая ветвь представляет собой всего одну строку, это в любом случае может быть очевидным. Но в реальной жизни у вас часто есть блок из многих строк кода внутри IF и многих условий, поэтому читателю может быть не сразу очевидно, что каждый блок заканчивается возвратом, и поэтому последний блок выполняется только тогда, когда все предыдущие условия ложны.
Одно исключение, которое я делаю из этой практики, - это когда код глубоко вложен.Когда он начинает слишком далеко ползать по странице, я часто нахожу более читаемым удалить ELSE.
Еще одно исключение - когда одно условие является нечетным, а другое - основным. Да, это полностью субъективно, но в таких случаях я предпочитаю по возможности размещать основную линию вне ELSE.
Похоже, вы спрашиваете, можно ли это:
if ((condition1) ||
(condition2) ||
(condition3) ||
(condition4) ||
(condition5) )
{
return true;
}
else
{ return false;
}
превратить в это:
if ((condition1) ||
(condition2) ||
(condition3) ||
(condition4) ||
(condition5) )
{
return true;
}
return false;
Да.
Подумайте также об этом:
return
(condition1) ||
(condition2) ||
(condition3) ||
(condition4) ||
(condition5);
Трудно сказать, не глядя на ваш код, но, учитывая, что у вас есть ряд условий, которые производят истину
, это может быть более ясным, чтобы код просто провалился и окончательно вернул ложь;
в конце:
public bool MyComplicatedTest()
{
if (complicated_condition1)
{
return true;
}
if (complicated_condition2)
{
return true;
}
....
return false;
}
Это чисто вопрос стиля и вкуса.
Лично я предпочитаю включать else только в случае ситуации «или-или».
if (SomeCondition())
return "Boxers";
else
return "Briefs";
Если в методе есть несколько возвратов, я опущу последний else.
if (!OvenOn())
return false;
if (timeRemaining <= 0d)
return false;
if (DoorOpen())
return false;
return true;
На мой взгляд, эта схема дает наибольшую ясность.
Все, что лучше всего выражает ваше намерение и / или наиболее читаемо.
Все следующие параметры вполне допустимы:
if (condition1)
return true;
if (condition2)
return true;
if (condition3)
return true;
return false;
или
if (condition1)
return true;
else if (condition2)
return true;
else if (condition3)
return true;
else
return false;
или
return condition1
|| condition2
|| condition3;
Я предпочитаю использовать первые два варианта, если условия нетривиальны или если в if
ветвь. Последний вариант может дать гораздо более сжатый код, если условия не слишком сложные.