三元运算符(Java)



我最近被介绍给三元运算符。我在CS学校度过了一年半,没有一位教授提到过三元运算符。这是我的第一个季度,我的教授经常使用它们。它们似乎非常适合缩短代码。因此,这个问题将帮助我理解三元运算符的边界,以及何时/如何使用它们。有没有一种方法可以使用一个长语句和一个三元运算符来缩短下面的代码块?

if(age < 18){
    minors+=1;
} else if(age < 65){
    adults+=1;
}else{
    seniors+=1;
}

您正在更新三个唯一的变量,其中一种使用ternaries的方法类似于

minors += (age < 18) ? 1 : 0;
adults += (age >= 18 && age < 65) ? 1 : 0;
seniors += (age >= 65) ? 1 : 0;

您可以将其写成一条语句:

int dummy = (age < 18) ? (minors += 1)
          : (age < 65) ? (adults += 1)
          :              (seniors += 1);

此处未使用dummy的值。这只是一种将表达式转化为语句的方法。

请注意,我不会考虑在实践中编写这样的逻辑。代码中有多种副作用,这使得它很难理解。

我认为您当前代码的意图在编写时非常清楚。根据我的经验,三元表达式往往会使代码更难阅读。

三元运算符不适合您的代码,因为您要更改3个不同的变量。我会让你的代码保持原样。

另一方面,假设你有这个

if (age < 18) {
    number += 1;
} else if (age < 65) {
    number = 8;
} else if (age < 90) {
    number += 2;
} else {
    number = 13;
}

这可以重写为类似于switch:

number = age < 18 ? number + 1 :
         age < 65 ? 8          :
         age < 90 ? number + 2 :
                    13;

我认为这是对if版本的改进。然而,以这种方式嵌套三元运算符并不常见,因此如果使用此版本,您可能会让查看代码的人感到困惑。

最新更新