问题标签 [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.
php - PHP 如果 OR 是第二部分检查为真?
我知道这一定是一个简单的问题,但我知道在 PHP 中这样的语句
如果 $a 为假 PHP 甚至不检查 $b
那么 OR 所以同样的事情
如果 $a 为真,它是否仍然检查 $b
我知道这是基本的东西,但我无法在任何地方找到答案......谢谢
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
陈述中。我知道这不是推荐的做法,可能会在后面咬我。但是,我确实想掌握这项技能,因为我喜欢写这样一个班轮,并希望将其用作我的个人风格。
所以我的问题是(是):
- 哪个运算符(
&&
或and
)短路了? - 手册说
&&
优先于and
,但是有人可以通过将短路的运算符特性/功能/特性与运算符优先级混合来举例说明。(基本上是优先级和短路的混搭)
请详细说明运算符的短路和返回值性质。
PS:1.希望这些操作符的关联性是一样的和直观的,但是如果你知道任何怪癖,请赐教。
PS:2.如果您仍然想警告我这种做法的危险,请举例说明。
$var = mysql_(...) or die()
编辑:通过替换更改我的简单代码or
后,我发现使用and运算符而不是and||
是多么烦人。代码根本不起作用!据我了解,前一个构造将返回值分配给or ,这反过来又使所有顺序使用来生成警告/错误/意外行为。后一种构造首先将 的结果分配给,然后计算 和 的复合物。这对我来说是一个很好的教训,我最好 1. 开始使用 PDO/mysqli 并自己处理错误 2. 在写我上面所说的个人风格
之前三思而后行||
&&
and
or
TRUE
FALSE
$var
$var
mysql_(...)
$var
=
die
.
//自我注意:不要在用另一种语言编写代码时使用一种脚本/解释性语言的经验,每一种都是独一无二的,有自己的怪癖和陷阱,这只是悲伤*叹息*
c++ - 短路和括号
在处理单个短路运算符时如何对子表达式进行分组是否重要?
上面的表达式是等价的吗?
sql - 没有短路 OR 与 Oracle 功能?
为了允许超级用户/管理员登录到我的系统,我正在运行(更大版本的)这个查询:
如果我传递一个用户 ID,我将获得该用户的所有数据;如果我传递字符串'Admin',我会得到所有数据。这是因为 Oracle 的 OR 是短路运算符。
但是,如果我将“Admin”设为包常量并使用函数获取它,就像这样
ORA-01722: invalid number
当我通过“管理员”时,我得到了。
当我引入一个函数时,为什么 OR 会失去它的短路特性?
php - Javascript 是否支持 PHP 中的短三元(更确切地说,变体)?
我喜欢 PHP 对“短三元”的支持,省略了第二个表达式:
Javascript 是否支持这样的语法?我试过?:
导致语法错误。我知道布尔短路,但这对于我目前正在做的事情是不可行的;那是:
有什么建议么?(我可以将它包装在一个立即调用的匿名函数中,但这似乎很愚蠢)
python - Python 相当于 Perl 的习语 do this or that,通常称为“or die”?
在 Perl 中,做类似function() || alternative()
. 如果第一个返回 false,它将运行第二个。
这如何在 Python 中轻松实现?
更新
示例(伪代码):
如果可能的解决方案应该适用于 Python 2.5+
注意:有一个隐含的假设,即您不能修改 func() 以引发异常,也不能编写包装器。
evaluation - 依靠短路评估是好的设计吗?
是否有更受欢迎的替代方案?
sql-server-2008 - SQL 2008:在不需要时阻止查询中的全文查找
从对这种特定情况的研究来看,对我来说,逻辑运算符在 SQL 中没有短路是个新闻。
我经常在 where 子句中按照这些思路做一些事情(通常在处理搜索查询时):
哪个,即使在这个例子中没有短路,也没有关系。但是,在处理全文搜索函数时,它确实很重要。如果该查询的第二部分是CONTAINS(myTable.Description, @Description)
,它将不起作用,因为对于这些函数,变量不允许为空或为空。
我发现 的WHEN
语句CASE
是按顺序执行的,所以我可以像这样更改我的查询以确保仅在需要时调用全文查找,同时将变量从 null 更改'""'
为 null 以允许执行查询:
上面的代码应该阻止全文查询片段的执行,除非实际上有一个值可以搜索。
我的问题是,如果我在 @Description 所在的位置运行此查询,'""'
则执行计划中仍有相当多的时间用于处理聚集索引查找和全文匹配,即使该表和搜索最终没有被使用:有没有办法避免这种情况?
我试图将其从硬编码的动态查询中取出并放入存储过程中,但如果过程最终变慢,我不确定我是否可以证明这一点。
language-agnostic - 有没有短路乘法之类的东西?
我们都知道逻辑表达式中的短路,即当
不打扰执行myFunc()
,因为if
条件不可能为真。
我很好奇你的日常代数方程是否有等价物,比如说
如果C=0
评估第一项没有意义。如果x
和y
是标量在性能方面并不重要,但如果我们假装它们是大型矩阵并且操作成本高昂(并且适用于矩阵),那么它肯定会有所作为。当然,您可以通过if C!=0
声明来避免这种极端情况。
所以我的问题是这样的功能是否存在,是否有用。我不是一个程序员,所以它可能以我没有遇到过的名字命名;如果是这样,请赐教:)
optimization - Clojure 有短路逻辑吗?
在许多语言中,如果你写一些类似的东西
并且 foo() 返回 true,则不会评估 bar() 和 foobar()。
假设我有以下 Clojure 代码:
如果 a 计算结果为真,那么 b 和 c 也会被计算,还是会被忽略?
谢谢!