标签: ternary-operator

Java三元运算符vs <JDK8兼容性中的if/else

最近我正在阅读Spring Framework的源代码.我无法理解的东西在这里:

public Member getMember() {
    // NOTE: no ternary expression to retain JDK <8 compatibility even when using
    // the JDK 8 compiler (potentially selecting java.lang.reflect.Executable
    // as common type, with that new base class not available on older JDKs)
    if (this.method != null) {
        return this.method;
    }
    else {
        return this.constructor;
    }
}
Run Code Online (Sandbox Code Playgroud)

此方法是类的成员org.springframework.core.MethodParameter.代码很容易理解,而评论很难.

注意:即使使用JDK 8编译器,也没有三元表达式来保持JDK <8的兼容性(可能选择java.lang.reflect.Executable为通用类型,旧的JDK上没有新的基类)

if...else...在这种情况下使用三元表达和使用构造有什么区别?

java ternary-operator java-8

112
推荐指数
4
解决办法
1万
查看次数

Angularjs if-then-else表达式中的构造

我可以以某种方式在angularjs表达式中使用if-then-else构造(三元运算符),例如我有函数$ scope.isExists(item)必须返回bool值.我想要这样的东西,

<div ng-repeater="item in items">
    <div>{{item.description}}</div>
    <div>{{isExists(item) ? 'available' : 'oh no, you don't have it'}}</div>
</div>
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用返回字符串的函数,我很有兴趣在表达式中使用if-then-else构造.谢谢.

javascript if-statement ternary-operator angularjs angularjs-ng-repeat

108
推荐指数
3
解决办法
19万
查看次数

Java中的三元运算符仅评估自Java 7以来的一个表达式 - 在Java 1.6和更低版本中是不同的?

为了准备Oracle认证助理Java SE 8程序员1考试,我在官方学习指南中看到了关于三元表达的以下段落:

三元表达式评估
从Java 7开始,将仅在运行时评估三元运算符的右侧表达式之一.以类似于短路运算符的方式,如果三元运算符中的两个右手表达式之一执行副作用,则可能不会在运行时应用它.让我们用以下例子来说明这个原则:[...]

它表示只评估两个表达式中的一个,演示如下:

int y = 1;
int z = 1;
int a = y < 10 ? y++ : z++;
Run Code Online (Sandbox Code Playgroud)

在这里,只有y增量,但z没有,正如您所期望的那样.

我绊倒的是段落的开头(标记为黄色),其中显示"从Java 7开始,......".我用Java 1.6测试了相同的代码,但是我找不到行为上的差异.我希望Java 1.6只根据段落中给出的信息来评估这两个表达式.有没有人知道他们想用"从Java 7开始......"这么说?

编辑:为了避免混淆:归结为这个问题,因为他们编写了"从Java 7开始",从Java 6切换到Java 7时,三元运算符有什么变化吗?

java ternary-operator short-circuiting java-6

106
推荐指数
2
解决办法
6555
查看次数

如何在PHP中使用三元运算符(?:)作为"if/else"的简写?

根据此页面中的示例,我在下面提供了工作和非工作代码示例.

工作代码使用if声明:

if (!empty($address['street2'])) echo $address['street2'].'<br />';
Run Code Online (Sandbox Code Playgroud)

使用三元运算符的非工作代码:

$test = (empty($address['street2'])) ? 'Yes <br />' : 'No <br />';

// Also tested this
(empty($address['street2'])) ? 'Yes <br />' : 'No <br />';
Run Code Online (Sandbox Code Playgroud)

更新
在Brian的小费之后,我发现回声$test输出了预期的结果.以下作品就像一个魅力!

echo (empty($storeData['street2'])) ? 'Yes <br />' : 'No <br />';
Run Code Online (Sandbox Code Playgroud)

php ternary-operator conditional-operator

104
推荐指数
7
解决办法
24万
查看次数

C#和Java的三元运算符之间的区别(?:)

我是C#新手,我遇到了一个问题.处理三元运算符(? :)时,C#和Java之间存在差异.

在以下代码段中,为什么第4行不起作用?编译器显示错误消息there is no implicit conversion between 'int' and 'string'.第5行不起作用.两者List都是对象,不是吗?

int two = 2;
double six = 6.0;
Write(two > six ? two : six); //param: double
Write(two > six ? two : "6"); //param: not object
Write(two > six ? new List<int>() : new List<string>()); //param: not object
Run Code Online (Sandbox Code Playgroud)

但是,相同的代码适用于Java:

int two = 2;
double six = 6.0;
System.out.println(two > six ? two : six); //param: double
System.out.println(two > six ? two : …
Run Code Online (Sandbox Code Playgroud)

c# java ternary-operator conditional-operator

94
推荐指数
5
解决办法
4595
查看次数

Javascript简写三元运算符

我知道在php 5.3中,而不是使用这个冗余的三元运算符语法:

startingNum = startingNum ? startingNum : 1
Run Code Online (Sandbox Code Playgroud)

...我们可以在适用的情况下为我们的三元运算符使用简写语法:

startingNum = startingNum ?: 1
Run Code Online (Sandbox Code Playgroud)

我知道javascript中的三元运算符:

startingNum = startingNum ? startingNum : 1
Run Code Online (Sandbox Code Playgroud)

......但有速记吗?

多谢你们!

javascript ternary-operator

89
推荐指数
5
解决办法
5万
查看次数

?:?? 运算符而不是IF | ELSE

public string Source
{
    get
    {
        /*
        if ( Source == null ){
            return string . Empty;
        } else {
            return Source;
        }
        */
        return Source ?? string.Empty;
    }
    set
    {
        /*
        if ( Source == null ) {
            Source = string . Empty;
        } else {
            if ( Source == value ) {
                Source = Source;
            } else {
                Source = value;
            }
        }
        */
        Source == value ? Source : value ?? string.Empty;
        RaisePropertyChanged ( "Source" );
    } …
Run Code Online (Sandbox Code Playgroud)

c# ternary-operator

84
推荐指数
3
解决办法
23万
查看次数

什么是?:在PHP 5.3中?

可能重复: 什么是PHP运算符"?"和":"被调用,它们做了什么?

来自http://twitto.org/

<?PHP
    require __DIR__.'/c.php';
    if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; }))
        throw new Exception('Error');
    $c();
?>
Run Code Online (Sandbox Code Playgroud)

Twitto使用从PHP 5.3开始提供的几个新功能:

  1. DIR不变
  2. 运营商
  3. 匿名功能

  1. 在PHP 5.3 中,数字2对?:做什么?

  2. 另外,匿名函数是什么意思?那不是已经存在了一段时间的东西吗?

php ternary-operator language-construct conditional-operator php-5.3

83
推荐指数
3
解决办法
4万
查看次数

为什么三元运算符用于在宏中定义1和0?

我正在为嵌入式项目使用SDK.在这个源代码中,我发现了一些代码,至少我发现这些代码很奇怪.在SDK的许多地方都有这种格式的源代码:

#define ATCI_IS_LOWER( alpha_char )  ( ( (alpha_char >= ATCI_char_a) && (alpha_char <= ATCI_char_z) ) ? 1 : 0 )

#define ATCI_IS_UPPER( alpha_char )  ( ( (alpha_char >= ATCI_CHAR_A) && (alpha_char <= ATCI_CHAR_Z) ) ? 1 : 0 )
Run Code Online (Sandbox Code Playgroud)

这里使用三元运算符有什么不同吗?

是不是

#define FOO (1 > 0)
Run Code Online (Sandbox Code Playgroud)

同样的

#define BAR ( (1 > 0) ? 1 : 0)
Run Code Online (Sandbox Code Playgroud)

我尝试使用它来评估它

printf("%d", FOO == BAR);
Run Code Online (Sandbox Code Playgroud)

得到结果1,所以看起来它们是平等的.是否有理由像他们一样编写代码?

c c++ boolean ternary-operator

79
推荐指数
6
解决办法
8697
查看次数

在c#中的iif等价物

有没有IIf等价的C#?还是类似的捷径?

.net c# iif-function ternary-operator

71
推荐指数
5
解决办法
27万
查看次数