例如,以下代码首先测试false,然后测试true。这样做有什么性能上的好处或节省时间吗?
if (!touch('some_file.txt', $time)) {
echo 'Whoops, something went wrong...';
} else {
echo 'Touched file with success';
}
代替
if (touch('some_file.txt', $time)) {
echo 'Touched file with success';
} else {
echo 'Whoops, something went wrong...';
}
答案 0 :(得分:0)
您可以先检查真相,但在大多数情况下,如果为false(例如文件不存在,则可以与代码进行交互),因此可以将return false
放在if块中。
如果使用if (touch())
,则必须在{}块中编写许多代码
比较:
if (touch(file)) {
//do something...
// do domething else...
if (file contensts) {
//do something....
//and so on...
if() {
// you can continue yourself...
}
}
// continue...
}
和
if (!touch(file)) {
throw new Error('some error');
// or return false
}
//do something...
// do domething else...
if (!contents(file)) {
return false;
}
// continue...
因此,要坚持一种风格,每个人都要先检查false
答案 1 :(得分:0)
在第一个条件下出现错误并没有实际的性能优势。但是,我个人这样做是为了获得更简洁的代码。通常,如果为false,则应终止该功能。
if (!$true)
return false;
long code...
不是很长的括号,有时很难跟踪。
答案 2 :(得分:0)
实际上,检查“ false”不是问题的表现,而是循环复杂性的问题。让我说清楚: 想象一下,您必须先满足4或5个条件,然后才能采取行动:
if (condition1 === true) {
...code
if (condition2 === true) {
...code
if (condition3 === true) {
...code
if (condition4 === true) {
...code
if (condition5 === true) {
...code
return value;
}
}
}
}
}
理解起来会很复杂吗? 现在,通过检查“ false”来应用“ leave early”规则。 下面的代码与上面的代码完全相同:
if (condition1 === false) {
return;
}
...code of condition 1 when is true
if (condition2 === false) {
return;
}
...code of condition 2 when is true
if (condition3 === false) {
return;
}
...code of condition 3 when is true
if (condition4 === false) {
return;
}
...code of condition 4 when is true
if (condition5 === false) {
return;
}
return value;
看看代码如何更简洁易读?这仅仅是因为您将嵌套级别保持在最低水平,而不是累积它们。
我希望这能回答您的问题。