前两天参加一个面试,面试官上来问我(Tell me something about Short Circuiting?), 我就蒙了,什么是Short Circuiting?虽然我听懂了,但我没用过这个啊,短路不是电路中的概念么?没办法我就跟他说让他换种方法问我,我可能用过,但这个英文概念我不知道。后来绕了半天,终于搞清楚他在问什么,而且也回答了上来了。所以还是写篇文章纪念一下吧,至少学到了新的英文单词。。。
在程序开发中,短路的概念是很少被谈论的东西,但理解起来却非常重要。
什么是短路
短路是许多编程语言在评估布尔逻辑(&&,||)时使用的一种技术,通过跳过布尔逻辑中不必要部分来节省计算能力。这个定义很模糊,所以为了准确解释什么是短路,我想举一些例子。
想象一下,代码中有一些布尔逻辑,看起来像这样 true || false 。我们知道,这个结果将是true,但是计算机需要逐句执行。这意味着计算机将查看语句的第一部分为true,然后查看第二部分 || 最后是false 。第一部分对计算机来说很容易,因为它只看到它是true,它可以移动到第二部分,即 ||。这是计算机做一些聪明的事情并且实际上短路布尔逻辑的地方。电脑知道(true || 任何事情)总是true,因此它会跳过检查我们语句的第三部分,因为它知道无论第三部分是什么,结果都是true。这同样适用于 && 。例如,计算机知道 false && any 总是false,因此在类似 false && true 这样的语句中,计算机将跳过第三部分,因为它已经知道答案是false。
为什么我们需要这种短路?
如果你使用过 React,你可能见过这样的代码 isLoaded && renderContent() 。它允许我们有条件地呈现内容,而无需使用 if 语句。如果我们进一步分解这段代码,我们可以看到如果 isLoaded 为false,那么计算机将跳过最后一部分并且永远不会调用 renderContent(),因为它知道 false && 任何东西 都是假的。本质上,这段代码与 if (isLoaded) renderContent() 完全相同,但更简洁。
不过,React 并不是短路的唯一用例。另一个更常见的用例是您想为变量分配默认值。这可以通过执行此 const variable = variableValue || 来完成'默认' 。如果 variableValue 存在或 variableValue 不存在,此代码会将其分配给 variableValue,它将设置为“默认值”。这再次通过短路起作用,因为计算机将查看第一部分 variableValue 并且如果它是评估为真的东西,例如对象实例,那么计算机将跳过布尔逻辑的“默认”部分。但是,如果 variableValue 的计算结果为 false,则计算机无法跳过任何内容,因此会将变量设置为“默认”。这与下面的代码基本相同。
所以这种短路不但可以让我们的代码看起来更简洁,而且更重要的是它减少了不必要的计算,提高了性能。
| 留言与评论(共有 0 条评论) “” |