问题标签 [short-circuiting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
347 浏览

php - PHP 如果 OR 是第二部分检查为真?

我知道这一定是一个简单的问题,但我知道在 PHP 中这样的语句

如果 $a 为假 PHP 甚至不检查 $b

那么 OR 所以同样的事情

如果 $a 为真,它是否仍然检查 $b

我知道这是基本的东西,但我无法在任何地方找到答案......谢谢

0 投票
1 回答
2595 浏览

php - “&&”和“and”的区别:运算符优先级和短路

我正在浏览 php.net 的运算符优先级部分,并遇到了这个例子,它说

我在代码中使用了大量的调试和冗长的 print(_r) 语句来跟踪我在代码中的位置。所以我在代码之间使用$debug and print_r($dataArray)or$verbose and print "Updating dataArray\n"作为单独的语句,允许我控制这些 print(_r) 语句。这来自我曾经写过很多[[ $condition ]] && { #Do if true } || { #Do if false }. 在 BASH 中,我知道它们是短路的,并利用这个事实编写了很多简单的单行。
现在我观察到很多这种做法(写作$verbose and print)正在慢慢地潜入我的if陈述中。我知道这不是推荐的做法,可能会在后面咬我。但是,我确实想掌握这项技能,因为我喜欢写这样一个班轮,并希望将其用作我的个人风格

所以我的问题是(是):

  1. 哪个运算符(&&and)短路了?
  2. 手册说&&优先于and,但是有人可以通过将短路的运算符特性/功能/特性与运算符优先级混合来举例说明。(基本上是优先级和短路的混搭)

请详细说明运算符的短路和返回值性质。

PS:1.希望这些操作符的关联性是一样的和直观的,但是如果你知道任何怪癖,请赐教。
PS:2.如果您仍然想警告我这种做法的危险,请举例说明。

$var = mysql_(...) or die()编辑:通过替换更改我的简单代码or后,我发现使用and运算符而不是and||是多么烦人。代码根本不起作用!据我了解,前一个构造将返回值分配给or ,这反过来又使所有顺序使用来生成警告/错误/意外行为。后一种构造首先将 的结果分配给,然后计算 和 的复合物。这对我来说是一个很好的教训,我最好 1. 开始使用 PDO/mysqli 并自己处理错误 2. 在写我上面所说的个人风格 之前三思而后行||&&andorTRUEFALSE$var$varmysql_(...)$var=die
.
//自我注意:不要在用另一种语言编写代码时使用一种脚本/解释性语言的经验,每一种都是独一无二的,有自己的怪癖和陷阱,这只是悲伤*叹息*

0 投票
4 回答
852 浏览

c++ - 短路和括号

在处理单个短路运算符时如何对子表达式进行分组是否重要?

上面的表达式是等价的吗?

0 投票
2 回答
1847 浏览

sql - 没有短路 OR 与 Oracle 功能?

为了允许超级用户/管理员登录到我的系统,我正在运行(更大版本的)这个查询:

如果我传递一个用户 ID,我将获得该用户的所有数据;如果我传递字符串'Admin',我会得到所有数据。这是因为 Oracle 的 OR 是短路运算符

但是,如果我将“Admin”设为包常量并使用函数获取它,就像这样

ORA-01722: invalid number当我通过“管理员”时,我得到了。

当我引入一个函数时,为什么 OR 会失去它的短路特性?

0 投票
3 回答
7419 浏览

php - Javascript 是否支持 PHP 中的短三元(更确切地说,变体)?

我喜欢 PHP 对“短三元”的支持,省略了第二个表达式:

Javascript 是否支持这样的语法?我试过?:导致语法错误。我知道布尔短路,但这对于我目前正在做的事情是不可行的;那是:

有什么建议么?(我可以将它包装在一个立即调用的匿名函数中,但这似乎很愚蠢

0 投票
4 回答
1510 浏览

python - Python 相当于 Perl 的习语 do this or that,通常称为“or die”?

在 Perl 中,做类似function() || alternative(). 如果第一个返回 false,它将运行第二个。

这如何在 Python 中轻松实现?

更新

示例(伪代码):

如果可能的解决方案应该适用于 Python 2.5+

注意:有一个隐含的假设,即您不能修改 func() 以引发异常,也不能编写包装器。

0 投票
2 回答
100 浏览

evaluation - 依靠短路评估是好的设计吗?

是否有更受欢迎的替代方案?

0 投票
2 回答
86 浏览

sql-server-2008 - SQL 2008:在不需要时阻止查询中的全文查找

从对这种特定情况的研究来看,对我来说,逻辑运算符在 SQL 中没有短路是个新闻。

我经常在 where 子句中按照这些思路做一些事情(通常在处理搜索查询时):

哪个,即使在这个例子中没有短路,也没有关系。但是,在处理全文搜索函数时,它确实很重要。如果该查询的第二部分是CONTAINS(myTable.Description, @Description),它将不起作用,因为对于这些函数,变量不允许为空或为空。

我发现 的WHEN语句CASE是按顺序执行的,所以我可以像这样更改我的查询以确保仅在需要时调用全文查找,同时将变量从 null 更改'""'为 null 以允许执行查询:

上面的代码应该阻止全文查询片段的执行,除非实际上有一个值可以搜索。

我的问题是,如果我在 @Description 所在的位置运行此查询,'""'则执行计划中仍有相当多的时间用于处理聚集索引查找和全文匹配,即使该表和搜索最终没有被使用:有没有办法避免这种情况?

我试图将其从硬编码的动态查询中取出并放入存储过程中,但如果过程最终变慢,我不确定我是否可以证明这一点。

0 投票
2 回答
1132 浏览

language-agnostic - 有没有短路乘法之类的东西?

我们都知道逻辑表达式中的短路,即当

不打扰执行myFunc(),因为if条件不可能为真。

我很好奇你的日常代数方程是否有等价物,比如说

如果C=0评估第一项没有意义。如果xy是标量在性能方面并不重要,但如果我们假装它们是大型矩阵并且操作成本高昂(并且适用于矩阵),那么它肯定会有所作为。当然,您可以通过if C!=0声明来避免这种极端情况。

所以我的问题是这样的功能是否存在,是否有用。我不是一个程序员,所以它可能以我没有遇到过的名字命名;如果是这样,请赐教:)

0 投票
6 回答
2818 浏览

optimization - Clojure 有短路逻辑吗?

在许多语言中,如果你写一些类似的东西

并且 foo() 返回 true,则不会评估 bar() 和 foobar()。

假设我有以下 Clojure 代码:

如果 a 计算结果为真,那么 b 和 c 也会被计算,还是会被忽略?

谢谢!