Лучший способ отформатировать, если оператор с несколькими условиями

Если ваш выход из print_r($var), например:

    Array ( [demo] => Array ( [0] => 10499478683521864 [1] => 07/22/1983 [2] => email@saya.com ) )

, выполните $var['demo'][0]

Если выход из print_r($var), например:

    Array ( [0] => 10499478683521864 [1] => 07/22/1983 [2] => email@saya.com )

, то do $var[0]

82
задан 4 November 2008 в 15:50
поделиться

7 ответов

Я предпочитаю Опцию A

bool a, b, c;

if( a && b && c )
{
   //This is neat & readable
}

, Если у Вас действительно есть особенно долгие условия переменных/метода, Вы можете просто разрыв строки их

if( VeryLongConditionMethod(a) &&
    VeryLongConditionMethod(b) &&
    VeryLongConditionMethod(c))
{
   //This is still readable
}

, Если бы они еще более сложны, тогда я рассмотрел бы выполнение методов условия отдельно вне, если оператор

bool aa = FirstVeryLongConditionMethod(a) && SecondVeryLongConditionMethod(a);
bool bb = FirstVeryLongConditionMethod(b) && SecondVeryLongConditionMethod(b);
bool cc = FirstVeryLongConditionMethod(c) && SecondVeryLongConditionMethod(c);

if( aa && bb && cc)
{
   //This is again neat & readable
   //although you probably need to sanity check your method names ;)
}

, по моему скромному мнению, единственная причина опции 'B' будет состоять в том, если Вы будете иметь отдельный else функции для выполнения за каждым условием.

, например,

if( a )
{
    if( b )
    {
    }
    else
    {
        //Do Something Else B
    }
}
else
{
   //Do Something Else A
}
125
ответ дан Benjamin W. 5 November 2019 в 16:56
поделиться

Первый пример - больше "легкое читать".

На самом деле, по-моему, необходимо только использовать второй каждый раз, когда еще необходимо добавить некоторых ", логика", но для простого Условного выражения, использует первую разновидность. Если Вы волнуетесь по поводу длинного из условия, всегда можно использовать следующий синтаксис:

if(ConditionOneThatIsTooLongAndProbablyWillUseAlmostOneLine
                 && ConditionTwoThatIsLongAsWell
                 && ConditionThreeThatAlsoIsLong) { 
     //Code to execute 
}

Удачи!

10
ответ дан David Santamaria 5 November 2019 в 16:56
поделиться

Другие ответы объясняют, почему право преимущественной покупки является обычно лучшим. Но если Вы имеете несколько условий, рассматриваете создание отдельной функции (или свойство), выполнение условия регистрируется в опции 1. Это делает код намного легче читать, по крайней мере, при использовании имен хорошего метода.

if(MyChecksAreOk()) { Code to execute }

...

private bool MyChecksAreOk()
{ 
    return ConditionOne && ConditionTwo && ConditionThree;
}

Это условия только полагаются на локальные переменные объема, Вы могли сделать новые функциональные помехи и передать во всем, в чем Вы нуждаетесь. Если существует соединение, передача в локальном материале.

28
ответ дан Torbjørn 5 November 2019 в 16:56
поделиться

Вопрос задали и, до сих пор, ответили, как будто решение должно быть принято просто на "синтаксических" основаниях.

я сказал бы, что правильный ответ как Вы расположение много условий в, если, должен зависеть от "семантики" также. Таким образом, условия должны быть разбиты и сгруппированы согласно тому, что вещи сочетаются "концептуально".

, Если два теста являются действительно двумя сторонами той же монеты, например, если (x> 0) & & (x< =100), тогда соединяет их на той же строке. Если другое условие концептуально намного более удалено, например, user.hasPermission (Администратор ()) тогда помещают его на свою собственную строку

, Например,

if user.hasPermission(Admin()) {
   if (x >= 0) && (x < 100) {
      // do something
   }
}
9
ответ дан interstar 5 November 2019 в 16:56
поделиться

В Perl Вы могли сделать это:

{
  ( VeryLongCondition_1 ) or last;
  ( VeryLongCondition_2 ) or last;
  ( VeryLongCondition_3 ) or last;
  ( VeryLongCondition_4 ) or last;
  ( VeryLongCondition_5 ) or last;
  ( VeryLongCondition_6 ) or last;

  # Guarded code goes here
}

, Если какой-либо сбой условий это просто продвинется после блока. При определении каких-либо переменных, которые Вы хотите иметь в наличии после блока необходимо будет определить их перед блоком.

0
ответ дан Brad Gilbert 5 November 2019 в 16:56
поделиться

Второй является классическим примером Антишаблон Стрелки , Таким образом, я избежал бы его...

, Если Ваши условия являются слишком длинными, извлекают их в методы/свойства.

4
ответ дан Omar Kooheji 5 November 2019 в 16:56
поделиться

Первый легче, потому что при чтении его слева направо Вы добираетесь: "Если что-то И somethingelse И somethingelse ТОГДА", который является легким для понимания предложения. Второй пример читает, "Если что-то ТОГДА, если somethingelse ТОГДА, если что-то еще ТОГДА", которое неуклюже.

кроме того, рассмотрите, хотели ли Вы использовать некоторый ORs в своем пункте - как Вы сделали бы это во втором стиле?

3
ответ дан RB. 5 November 2019 в 16:56
поделиться
Другие вопросы по тегам:

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