В, Если еще Оператор для возврата метода, должен Еще быть явно указанным, если он может вместо этого неявно сопровождаться?

У меня есть метод, который проверяет определенные вещи и возвращает булевскую переменную на основе тех проверок. Это включает единственное ветвление, Если раздел, который проверяет приблизительно 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; }
6
задан Grace Note 20 April 2010 в 16:26
поделиться

7 ответов

Я предпочитаю что-то подобное возврату точных значений.

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;
}
5
ответ дан 8 December 2019 в 03:52
поделиться

Это действительно вопрос стиля и того, что вы (и те, с кем работаете) считаете более ясным. В общем, я лично считаю структуру:

if( a )
   someResult = doSomething();
else if( b )
   someResult = doSomethingElse();
else
   someResult = doSomethingAnyways();

return someResult;

более ясной, чем:

if( a )
    return doSomething();
if( b )
    return doSomethingElse();
return doSomethingAnyways();
11
ответ дан 8 December 2019 в 03:52
поделиться

Лично я обычно предпочитаю использовать ELSE, потому что я думаю, что это проясняет намерение. Если вы напишете

if (sensorScan()==ENEMY)
  return FIRE_PHASERS;
else
  return SEND_GREETING;

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

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

Еще одно исключение - когда одно условие является нечетным, а другое - основным. Да, это полностью субъективно, но в таких случаях я предпочитаю по возможности размещать основную линию вне ELSE.

3
ответ дан 8 December 2019 в 03:52
поделиться

Похоже, вы спрашиваете, можно ли это:

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);
2
ответ дан 8 December 2019 в 03:52
поделиться

Трудно сказать, не глядя на ваш код, но, учитывая, что у вас есть ряд условий, которые производят истину , это может быть более ясным, чтобы код просто провалился и окончательно вернул ложь; в конце:

public bool MyComplicatedTest()
{
    if (complicated_condition1)
    {
        return true;
    }

    if (complicated_condition2)
    {
        return true;
    }
    ....

    return false;
}
1
ответ дан 8 December 2019 в 03:52
поделиться

Это чисто вопрос стиля и вкуса.

Лично я предпочитаю включать else только в случае ситуации «или-или».

if (SomeCondition())
    return "Boxers";
else
    return "Briefs";

Если в методе есть несколько возвратов, я опущу последний else.

if (!OvenOn())
    return false;
if (timeRemaining <= 0d)
    return false;
if (DoorOpen())
    return false;
return true;

На мой взгляд, эта схема дает наибольшую ясность.

1
ответ дан 8 December 2019 в 03:52
поделиться

Все, что лучше всего выражает ваше намерение и / или наиболее читаемо.

Все следующие параметры вполне допустимы:

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 ветвь. Последний вариант может дать гораздо более сжатый код, если условия не слишком сложные.

4
ответ дан 8 December 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: