[英]Is it more efficient to put the more common case first in an IF statement?
这是我最近的任务
特定变量有时会为空(除了串联在一起的某些空格外),在这种情况下,我想回显“错误”消息
这是我的if语句:
if(preg_match("/^\s+$/",$var[$i])) {
echo "Description not available";
} else {
echo $var[$i];
}
我的问题是,由于错误是例外而非规范,因此编写预期最常见情况的查询是否更有效?
例如:
if(!preg_match("/^\s+$/",$var[$i])) {
echo $var[$i];
} else {
echo "Description not available";
}
或者,也许有一种更好的方式来编写此文件, 这样会更有效?
可以公平地说,差异不明显,但可能根本没有差异! 我不知道PHP引擎如何通过这些语句工作
没关系 多数民众赞成在用户偏好。 但是我认为更多的人喜欢在一开始就编写最常见的案例。 无论如何,为什么要在示例中使用preg_match?
这将是最简单的写法:
if(!empty($var[$i]) && !ctype_space($var[$i]) {
echo $var[$i];
} else {
echo "Description not available!";
}
就像您看到的一样-我在开始时使用的是最常见的情况。
我已经编辑了答案以检查空格。 无论如何,用空格检查正则表达式可能是更干净的解决方案。
实际上没有区别。 通常,要使if()中的逻辑最容易理解(额外的!会增加人工分析的复杂度)。 就是说,如果if的主体最终相对较大,而else中的代码很少,例如对于一个错误,则您可能更喜欢反转逻辑并将错误放在首位,以便乍一看,这两个错误并且大多数逻辑可以一起看到。
如果您嵌套了if
语句,则可以先组织它们以测试最常见的结果,以加快处理速度。
如果您有包含AND
和/或OR
的更复杂的语句AND
可以安排这些语句“更快地失败”。 Fe使用AND
并将最可能的选项设置为false可以使程序更频繁地完全跳过第二个测试。
您给出的示例虽然没有执行任何操作。 因此,尽管可以通过对IF
语句重新排序来加快处理速度,但在您的特定示例中是不可能的(除非您遵循@Xatenev给出的想法)。
几年前(在PHP 5.x上)我做了一些基准测试,但我无法明确指出是否使用负运算符进行了时间或空间优化。
这完全取决于您的可读性,为此,我的观点是首先从错误案例入手,探讨函数/方法。 目的是减少我的功能中的嵌套级别。
示例:代替
function foo()
{
if ($a === 1) {
if ($b === 2) {
if ($c === 3) {
return doD();
} else {
return doC();
}
} else {
return doB();
}
} else {
return doA();
}
}
你可以做
function foo()
{
if ($a !== 1) {
return doA();
}
if ($b !== 2) {
return doB();
}
if ($c !== 3) {
return doC();
}
return doD();
}
了解仅通过切换布尔条件如何减少嵌套级别。
但是,当然,这只是个人使用和偏爱,这里没有规则,也没有优化。
我猜这更好更快
if ( ! empty( trim($var[$i]) ) ){
echo "Description available!";
}
else{
echo "Description not available!";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.