【问题标题】:Ternary operator with nothing in 'if' condition在“if”条件下没有任何内容的三元运算符
【发布时间】:2014-10-08 13:30:19
【问题描述】:

下面的代码是做什么的?

return obj ? : [NSNull null];

根据我对三元运算的理解,它相当于:

if (!obj)
    return [NSNull null];

但是if (obj) 返回了什么?还是会落到return [NSNull null]

【问题讨论】:

标签: ios objective-c iphone ternary-operator


【解决方案1】:

代码...

return foo ? : bar;

将返回与...相同的值

return foo ? foo : bar;

不同的是,第一种方法只检查foo的值一次。

在几种情况下最好使用第一个。

例如,创建一个对象...

// this would create two objects, one to check and the other to return
return [MyObject objectWithSomeParam:param] ? [MyObject objectWithSomeParam:param] : bar;

或者运行一个昂贵的功能......

// the expensive function here is run twice
return [self someExpensiveFunction] ? [self someExpensiveFunction] : bar;

这两个都将受益于使用

return foo ?: bar;

本质上,如果验证对象与返回对象相同为 true,则使用缩短的版本。

【讨论】:

    【解决方案2】:

    如果objTrue,则返回obj

    return obj ? : [NSNull null];
    

    相当于:

    id x = obj;
    if (x) {
        return x;
    else {
        return [NSNull null];
    }
    

    只要 obj 没有副作用,它在逻辑上等价于:

    return obj ? obj : [NSNull null]
    

    【讨论】:

    • 所以和return obj ? obj : [NSNull null]一样?
    • 是的,完全正确。我会添加它以供参考。
    • 是的,但它只需要对对象进行一次检查。想想它是否是一个返回布尔值的昂贵函数。您评论中的方法将运行该函数两次。
    • @DanielHepper 不用担心。我打算更新你的 if 函数来表示差异,但我看到你已经完成了:)
    猜你喜欢
    • 2016-03-30
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2017-08-26
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多