2010-03-11 2 views
3

У меня возникли проблемы с упрощением этой условной логики высказываний. Есть ли более шипучий способ написать это?Как я могу упростить эту логику

if(($x || $a) && ($x || $y)) 
{ 
    if($x){ 
      return true; 
    } 
} 
return false; 
+1

'возвращение х & & true;'? – Anycorn

+2

это шутка? – Drew

ответ

6
if ($x) return true; 
return false; 

Согласно выписке, вы только возвращает истину, если $x верно, поэтому это единственное заявление, что вам действительно нужно, чтобы проверить, правильно? Переменные $a и $y совершенно не актуальны.

Edit: То же самое, как:

return (bool) $x; 
+0

Возможно, он захочет сделать это, если и только если один из '$ a',' $ y' - 'true'. –

+2

Я бы использовал 'return (bool) $ x;' – Gumbo

+1

@The Charmer: Но даже в первом утверждении, если '$ x' истинно, оба утверждения становятся истинными автоматически.Если '$ x || $ a' и '$ x || $ y' оба истины, если '$ x' истинно, поэтому && между ними делает общее утверждение истинным. – animuson

0
if($x){ 
      return true; 
    } 

    return false; 

?

Edit:

return $x 
0
if($x && ($a || $y)) 
    return true; 

return false; 
+0

Это семантически не то же самое. '($ x || $ a) && ($ x || $ y)' эквивалентно '$ x || ($ a && $ y) 'и' $ x && ($ a || $ y) 'to' ($ x || $ a) && ($ x || $ y) '. – Gumbo

0
if(($x && $a && $y) 
{ 
    return true; 
} 
return false; 

EDIT: это просто return $x;

4

Если вы только возвращает истину, если $ х верно, то остальная часть кода не имеет значения , Таким образом,

return (bool) $x; 

EDIT: Oops ... bool - это отливка, а не функция.

0

Вы могли бы написать это как выражение в одну строку ...

return $x; 

независимо от $ а и $ у, $ х должно быть правдой, чтобы вернуться верно

1

Как и многие люди уже говорили , в вашем коде есть только $ x. Я предполагаю, что самый короткий код:

return $x 
+0

Что делать, если '$ x' является строкой или числом? Тогда он не возвращает логическое значение true/false. – animuson

+0

Вы правы. Похоже, нам нужно, чтобы if ($ x) возвращал true; else возвращает false. Во всяком случае, почему у вас есть метод для этого, когда единственное, что он делает, это проверить значение $ x ... –

+0

Не знаю, похоже, это было бы хорошее школьное задание, кто знает. – animuson

2

Состояние внешней if, ($x || $a) && ($x || $y), эквивалентно $x || ($a && $y). Когда мы соединимся с условием, что $x также должно быть true (внутренний if), получаем ($x || ($a && $y)) && $x. И это эквивалентно $x && $x || $x && $a && $y, которое может быть уменьшено до $x || $x && $a && $y. В обоих ветвях OR $x должно быть true для продолжения. Но если $x в правой ветке соответствует true, все состояние уже есть true.

Таким образом, единственная переменная, которая должна быть истинным является $x:

return (bool) $x; 
Смежные вопросы