标签: short-circuiting

使用&&的短路作为if语句?

我在jQuery.form.js源代码中看到了这一行:

g && $.event.trigger("ajaxComplete", [xhr, s]);
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是wtf ??

我的下一个想法是,我无法确定这是丑陋还是优雅.

我不是一个Javascript大师,所以我的问题是2倍.首先,我想确认我理解正确.以上行是否相当于:

if (g) {
    $.event.trigger("ajaxComplete", [xhr, s]);
}
Run Code Online (Sandbox Code Playgroud)

其次是Javascript中常见/接受的做法?一方面它很简洁,但另一方面,如果你以前没见过它,它可能有点神秘.

javascript short-circuiting

28
推荐指数
3
解决办法
8275
查看次数

Java三元(即时)评估

我无法找到规范的相关部分来回答这个问题.在Java中的条件运算符语句中,是否评估了true和false参数?

因此,以下内容可能会抛出NullPointerException

Integer test = null;

test != null ? test.intValue() : 0;
Run Code Online (Sandbox Code Playgroud)

java conditional-operator short-circuiting

27
推荐指数
3
解决办法
2万
查看次数

在存储检查结果时,像Python的"和"这样的短路评估

我有多个昂贵的函数返回结果.如果所有检查都成功,我想返回所有检查结果的元组.但是,如果一次检查失败,我不想调用后面的检查,如短路行为and.我可以嵌套if语句,但是如果有很多检查,这将失控.如何and在保存结果供以后使用的同时获得短路行为?

def check_a():
    # do something and return the result,
    # for simplicity, just make it "A"
    return "A"

def check_b():
    # do something and return the result,
    # for simplicity, just make it "B"
    return "B"

...
Run Code Online (Sandbox Code Playgroud)

这不会短路:

a = check_a()
b = check_b()
c = check_c()

if a and b and c:
    return a, b, c
Run Code Online (Sandbox Code Playgroud)

如果有很多检查,这很麻烦:

if a:
   b = check_b()

   if b:
      c = check_c()

      if c:
          return a, b, …
Run Code Online (Sandbox Code Playgroud)

python short-circuiting

26
推荐指数
3
解决办法
1608
查看次数

Javascript是否支持PHP中的短三元组(而不是变体)?

我已经厌倦了PHP对"短三元"的支持,省略了第二个表达式:

// PHP

$foo = 'hello';
$bar = '';

echo $foo ?: 'world'; // hello
echo $bar ?: 'world'; // world
Run Code Online (Sandbox Code Playgroud)

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

// Javascript

var data = {
    key: value ?: 'default'
};
Run Code Online (Sandbox Code Playgroud)

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

javascript php ternary-operator short-circuiting

25
推荐指数
2
解决办法
6332
查看次数

使用短路来获得第一个非空变量

在PHP中,以下内容(基于JS样式)相当于:

echo $post['story'] || $post['message'] || $post['name'];
Run Code Online (Sandbox Code Playgroud)

所以,如果故事存在,那么发布; 或者如果消息存在,等等......

php short-circuiting

25
推荐指数
5
解决办法
5991
查看次数

使用短路(&&)条件组件反应显示0而不是任何内容

我有以下简单的短路语句,应该显示组件或什么都没有:

{profileTypesLoading && <GeneralLoader />}

如果该语句为false,则呈现0而不是任何内容.

我已经做了一个console.log(profileTypesLoading)公正的事情来快速查看该profileTypesLoading属性的状态,并且它是预期的1或0.0应为false ...导致无法渲染.对?

知道为什么会这样吗?

components short-circuiting reactjs

25
推荐指数
5
解决办法
3201
查看次数

什么时候在守卫测试中更喜欢`和`而不是`andalso`

我很好奇为什么逗号<,>是一个快捷方式and而不是andalso保护测试.

由于我称自己为"C native",我没有看到短路布尔评估的任何缺点.

我使用to_core标志编译了一些测试代码,以查看实际生成的代码.使用逗号,我看到左手值,右边和值得到评估,并且两者都是和.随着andalso你的情况下块内的情况下块,并没有呼叫erlang:and/2.

我没有进行基准测试,但我敢说andalso变体是更快的.

erlang boolean-expression short-circuiting

24
推荐指数
4
解决办法
7734
查看次数

C#If语句中条件的执行顺序

下面有两个if语句,它们使用逻辑运算符有多个条件.逻辑上两者都相同,但检查顺序不同.第一个工作,第二个工作失败.

我引用了MSDN来检查是否定义了执行条件的顺序; 但我找不到.

考虑具有&&逻辑运算符的多重检查条件.是否保证始终检查第一个条件,如果不满足,则不会检查第二个条件?

我曾经使用方法1,它运作良好.寻找证明使用的MSDN参考.

UPDATE

参考"短路"评估

  List<string> employees = null;  

  if (employees != null && employees.Count > 0)
  {
        string theEmployee = employees[0];
  }

  if (employees.Count > 0 && employees != null)
  {
        string theEmployee = employees[0];
  }
Run Code Online (Sandbox Code Playgroud)

.net c# conditional short-circuiting logical-operators

24
推荐指数
4
解决办法
2万
查看次数

有没有像"std :: and"或"std :: or"这样的东西?

给定一个布尔值的容器(例如std::vector<bool>),是否存在标准函数,true如果所有值都是true("和")或者true至少有一个值是true("或"),则返回短路评估?

今天早上我在www.cplusplus.com上挖了一个但是找不到任何东西.

c++ algorithm boolean std short-circuiting

22
推荐指数
3
解决办法
3486
查看次数

C#中的| =和&=赋值运算符短路

我知道,||&&在C#中被定义为短路运营商,这种行为是由语言规范保证,但做|=&=短路呢?

例如:

private bool IsEven(int n)
{
    return n % 2 == 0;
}

private void Main()
{
    var numbers = new int[] { 2, 4, 6, 8, 9, 10, 14, 16, 17, 18, 20 };

    bool allEven = true;
    bool anyOdd = false;

    for (int i = 0; i < numbers.Length; i++)
    {
        allEven &= IsEven(numbers[i]);
        anyOdd |= !IsEven(numbers[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

当9条目被命中时,allEven变为false,这意味着所有后续条目都是无关紧要的 - allEven对于将来对该表达式的所有调用,该值保证为false.同样如此anyOdd,当它看到9时设置为true,并且对于该表达式的所有后续调用将保持为true.

那么,做&= …

c# short-circuiting

22
推荐指数
4
解决办法
5187
查看次数