CodeGym /Java 博客 /随机的 /三元运算符
John Squirrels
第 41 级
San Francisco

三元运算符

已在 随机的 群组中发布
你好!今天的课不会很长,但绝对有用:) 我们要讲的就是所谓的三元运算符三元运算符 - 1三元的意思是“由三部分组成”。if-else它是您已经遇到的控制流语句的替代方法。让我们举个例子。假设有人决定去看一部 R 级电影(17 岁以下需要父母或成年监护人陪同)。接待员在门口检查年龄:如果年龄检查合格,则允许进入;如果没有,他将被送回家。让我们声明一个Person类并使用if-else语句检查它:

public class Person {

   private int age;

   public Person(int age) {
       this.age = age;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public static void main(String[] args) {

       Person person = new Person(22);

       String usherResponse;

       if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }

       System.out.println(usherResponse);

   }
}
控制台输出:

"Everything is in order. Come in!"
如果我们删除控制台输出,那么我们的检查如下所示:

if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }
这里的逻辑非常简单:检查一个条件(年龄 >= 18),根据结果,usherResponse将变量分配给两个字符串之一,并附上引座员的回复。这种情况(“一种情况 - 两种可能的结果”)在编程中极为常见。这就是创建三元运算符的原因。我们可以使用它来将我们的检查简化为一行代码:

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
下面是这个运算符的工作原理。它被称为三元运算符,因为它涉及 3 个组件:
  • 一个条件 ( person.getAge() > 18)
  • 两种可能的结果(“一切正常。进来吧!”“这部电影不适合你的年龄!”
首先,我们写下条件,然后是问号。

person.getAge() > 18 ?
“这个人的年龄超过十八岁了吗?” 然后我们写入第一个值如果条件评估为true:,则使用此值:

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
这个人的年龄是否超过 18 岁?如果是,将 usherResponse 变量设置为“一切正常。进来吧!” 接下来是“ :”符号和第二个值如果条件评估为false:,则使用此值:

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
这个人的年龄是否超过 18 岁?如果是,将 usherResponse 变量设置为“一切正常。进来吧!” . 如果不是,请将 usherResponse 变量设置为“这部电影不适合您的年龄!” 通常,三元运算符的逻辑如下所示。健康)状况 ?outcome 1 : outcome 2 三元运算符 - 2顺便说一句,条件周围的括号不是必需的:我们添加它们是为了提高可读性。它也可以在没有它们的情况下工作:

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
那么你应该使用什么?语句if-else还是三元运算符?在性能方面,没有区别。更准确地说,也许有,但微不足道。这里最大的考虑是代码的可读性。您编写的代码不仅要能正常工作,而且要易于阅读。毕竟,它可能会被其他程序员、您的同事“继承”!如果很难理解,就会使他们的工作和你的工作复杂化(他们会每 5 分钟跑来找你解释)。 一般的建议是:如果条件简单且易于验证,则可以无害地使用三元运算符。这使您可以减少代码量和if-else声明(可能已经有很多)。但是如果条件比较复杂,涉及多个步骤,还是用if-else语句比较好。例如,在这种情况下使用三元运算符不是一个好主意:

String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
目前还不清楚这里发生了什么!代码变得非常难以阅读。而这一切都是因为复杂的条件:
  • 如果有人年满 18 岁,有门票(或免费通行证)并且没有年幼的孩子,他可以进来。
  • 如果条件的一部分是假的,那么他就不能。
这里显然使用if-else. 是的,我们的代码会更大,但会更易读。而且你的同事如果继承了这段代码就不会打脸了:) 最后,我可以为你推荐一个好东西。我们在课程中谈到了代码的可读性。Robert Martin 的经典之作《Clean Code》就是专门讨论这个话题的。 三元运算符 - 4它汇集了针对程序员的最佳实践和建议,这将帮助您编写不仅实用而且易于阅读的代码。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION