对不起如果这是一个comp-sci101个问题。我只是不确定的,如果我失去了一些东西,显而易见的。

因此,让我们说,一些用户输入抛出一个错误,并且我想要抓住它和退回一些反馈。错误将是一个数字,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;

不管怎样,我是随后注意到的或操作者在第一线,并认为它可能会更好/更安全的用户和操作者。但更多的我考虑,我看到一个差别。

因此,真正的问题是,如果要消除两种可能性的一个具体的变量和或相同的,或者是一个逻辑/功能的更多最佳的?

有帮助吗?

解决方案

逻辑下面是相同的(原谅我伪代码)

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

功能,其中一个是更理想的?他们都为对方为最佳。这两种方法(&&和||)允许短路如果第一个表达式为真(在||情况下)或假(在&&情况下)

其他提示

如果您使用switch语句这将是更可读:

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

首先,我想我会建议使用识别比使用“幻数”错误的另一种方式。他们是很难维持的,因为你很容易忘记什么是“3”的意思。它看起来像你的语言是PHP,这对异常的支持。我推荐使用他们,而不是,你可以阅读更多关于他们在这里: http://dk.php.net/例外

至于逻辑运算符,没有任何真正的被认为是“良好做法”。使用你想要什么。如果你有麻烦搞清楚当你的表情是真/假,请尝试真值表:的http:// en.wikipedia.org/wiki/Truth_table

性能明智的,记住该评估将在大多数语言懒惰。使用OR,如果第一个条件为真,这将不计算第二个条件返回true。为AND,如果第一条件是假的,不评估第二它将返回false。

否则,运营商自己的性能是不是真的不同。用的是最可读的给你。

最好的是一个可以帮助读码速度更快。它是唯一真正的优化,你可以在这里做,并有可能在数以百万计的其他地方。

这会看起来更简单地读:

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

没人注意到了微秒,你可能会获胜。

  1. 我个人将消除使用这些号码和使用常数,而不是。除了更易于维护的,他们使编码本身更容易及可以更新的数值例如明天如果某些情况下foreces你改变的数量从3,你要漂亮得多看过你所有的代码
  2. 正如所建议的gkrogers,一个开关 同时完成同样的事情 是很容易阅读和维护

在性能方面,我相信他们都非常相似(见wvanbergen后),但也有在行为上明显的差异。我认为,当前的发布可能不会做你希望的东西。在第一行,如果你$ _error = 3,那么你将有$ no_errors =假。当你检查两个条件,这两个需要满足的可能,并会更合适。

有时候我发现要检查我的逻辑是居然说我想要什么响亮的最简单方法。例如, “我们没有错误,如果错误码是的 0 第3”

我通常发现,在这样的情况下,只有少数变量,我会写句子的英文为我提供了确定的逻辑运算符的最直观而准确的方法方式。

如果您发现该代码在该加工之后看起来杂乱无章,那么你可能会发现这个在德摩根定律链接有用

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

编辑:!(A || B)=(A && B)是错误的。韩国社交协会的意见。正确的形式是(!甲||!B)=!(A && B)。

我的道歉

如果你使用:

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

这意味着如果$错误!= 0 AND $错误!= 3,其是无效的逻辑,因为$误差不能被==至3和0也可以是3 OR 0但不是两者。结果 在上面的例子中,如果$错误= 0那么将评估为FALSE,因为它不是3 && 0你正在寻找它是要么3 || 0

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top