Как я могу упростить эту логику - PullRequest
3 голосов
/ 11 марта 2010

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

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

Ответы [ 8 ]

6 голосов
/ 11 марта 2010
if ($x) return true;
return false;

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

Редактировать: То же, что и:

return (bool) $x;
4 голосов
/ 11 марта 2010

Если вы вернете true, только если $ x равно true, то остальная часть кода не имеет значения. Таким образом,

return (bool) $x;

РЕДАКТИРОВАТЬ: Упс ... bool - это приведение, а не функция.

2 голосов
/ 11 марта 2010

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

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

return (bool) $x;
1 голос
/ 11 марта 2010

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

return $x
0 голосов
/ 11 марта 2010

Вы можете написать это как однострочное выражение ...

return $x;

независимо от $ a и $ y, $ x должно быть true, чтобы возвращать true

0 голосов
/ 11 марта 2010
if(($x && $a && $y)
{
    return true;
}
return false;

РЕДАКТИРОВАТЬ : это просто return $x;

0 голосов
/ 11 марта 2010
if($x && ($a || $y))
     return true;

return false;
0 голосов
/ 11 марта 2010
   if($x){
          return true;
   }

   return false;

Edit:

return $x
...