逻辑运算符:是否优于OR?

时间:2009-01-19 11:29:20

标签: php error-handling logic

很抱歉,如果这是一个comp-sci 101问题。我只是不确定我是否遗漏了一些明显的东西。

所以让我们说一些用户输入会抛出一个错误,我想抓住它并返回一些反馈。错误将是一个数字,0 - 8. 0表示“无错误”。如果错误是3,我想给用户非常具体的反馈(不允许数字,让我们说)。对于其他7种可能性,我只想结束脚本并回显错误。

我正在努力解决这个问题:

$no_errors ($_error != 0 || $_error != 3) ? FALSE : TRUE;
if (!$no_errors)
echo $error_msg['$_error'];
$error_3 ($no_errors && $_error == 3) ? TRUE : FALSE;
if ($error_3)
   bunch of stuff happens;
else
   bunch of other stuff;

无论如何,我当时注意到第一行的OR运算符,并且认为使用AND运算符可能更好/更安全。但是我想的越多,我看到的差别越小。

所以真正的问题是,如果你想消除特定变量的两种可能性,它们是AND和OR相同,还是逻辑上/功能上更优化?

10 个答案:

答案 0 :(得分:20)

如果使用switch语句,它将更具可读性:

switch ($_error) {
    case 0;
        nothing happens;
        break;
    case 3:
        bunch of stuff happens;
        break;
    default:
        bunch of other stuff;
        break;
}

答案 1 :(得分:4)

首先,我认为我建议使用另一种识别错误的方法,而不是使用“魔术数字”。它们很难维护,因为你很容易忘记“3”的含义。看起来您的语言是PHP,它支持异常。我建议您使用它们,您可以在此处详细了解它们:http://dk.php.net/exceptions

对于逻辑运算符,实际上没有任何被认为是“良好实践”。用你想要的。如果您无法确定表达式何时为真/假,请尝试制作真值表:http://en.wikipedia.org/wiki/Truth_table

答案 2 :(得分:2)

在性能方面,请记住,评估在大多数语言中都是懒惰的。使用OR,如果第一个条件为真,它将返回true而不评估第二个条件。对于AND,如果第一个条件为false,则返回false,而不评估第二个条件。

否则,运营商本身的表现并没有真正的不同。使用最易读的内容。

答案 3 :(得分:1)

最好的是帮助更快地读取代码的那个。这是你可以在这里进行的唯一真正的优化,也可能在数百万其他地方。

答案 4 :(得分:1)

这看起来更简单:

  if($_error==3)
      do stuff;
    else if($_error>0)
      do some other stuff
    else
      do normal stuff

没有人注意到你可能赢得的微秒。

答案 5 :(得分:1)

逻辑上以下是相同的(请原谅我的伪代码)

(! expression_one || ! expression_two) /** this is the same as the one below **/
! (expression_one && expression_two)

功能上哪一个更优化?它们都是最佳的。如果第一个表达式为真(在||情况下)或为假(在&& case中)

,则两种方式(&&和||)都允许短路

答案 6 :(得分:1)

  1. 我个人会删除这些数字的使用并改用常量。除了易于维护之外,它们使编码本身更容易,并允许您明天更新值,例如如果某些情况促使您将数字从3更改,则必须仔细查看所有代码
  2. 正如gkrogers所建议的,一个开关 同时完成同样的事情
  3. 更容易阅读和维护

答案 7 :(得分:0)

(A || B)=!(A&& B)。所以它确实没有什么区别

编辑:(A || B)=!(A&& B)错误。请评论。正确的形式是(!A ||!B)=!(A&& B)。

道歉

答案 8 :(得分:0)

表现明智我认为它们非常相似(见wvanbergen的帖子),但行为上有明显的差异。我认为你目前的帖子可能没有做你想要的。在$ _error = 3的第一行中,你将有$ no_errors = false。当您检查两个条件时,两个条件都需要满足,并且更合适。

有时候我发现检查逻辑的最简单方法就是实际说出我想要的内容。例如,“如果错误代码 0 3,则我们没有错误

我通常发现在这种情况下只有几个变量,我用英语写句子的方式为我提供了最直观(和准确)的方法来确定逻辑运算符。

如果您发现此过程后代码看起来很混乱,那么您可能会发现有关De Morgan法律的this链接很有用

答案 9 :(得分:0)

如果您使用:

$no_errors ($_error != 0 && $_error != 3) ? FALSE : TRUE;

这意味着如果$ error!= 0 AND $ error!= 3这是无效的逻辑,因为$ error不能==到3和0它可以是3或0但不能同时两者。
在上面的例子中,如果$ error = 0,那么它将评估为FALSE,因为它不是3&& 0你正在寻找3 || 0