你好!今天的讲座不会很长,但绝对有用:) 我们将讨论所谓的三元运算符。 “三元”的意思是“三重”。
if-else
这是您已经熟悉的条件运算符的替代方案。让我们举个例子。假设一个人决定去电影院看一部分级为 18+ 的电影。门卫在入口处检查他的年龄:如果符合年龄限制,就允许他进入大厅;如果不符合年龄限制,就送他回家。让我们创建一个类Man
并使用以下命令检查它if-else
:
public class Man {
private int age;
public Man(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
Man man = new Man(22);
String securityAnswer;
if (man.getAge() >= 18) {
securityAnswer = "It's all right, come in!";
} else {
securityAnswer = "This movie is not suitable for your age!";
}
System.out.println(securityAnswer);
}
}
控制台输出:
"Все в порядке, проходите!"
如果我们删除控制台的输出,我们的测试将如下所示:
if (man.getAge() >= 18) {
securityAnswer = "It's all right, come in!";
} else {
securityAnswer = "This movie is not suitable for your age!";
}
事实上,这里的逻辑很简单:检查一个条件(年龄 >= 18)。根据这一点,securityAnswer
将带有警卫响应的两行之一分配给该变量。这种“一个条件 - 两种可能的结果”的情况在编程中经常出现。因此,为它们创建了相同的三元运算符。有了它,我们可以将验证简化为一行代码:
public static void main(String[] args) {
Man man = new Man(22);
String securityAnswer = (man.getAge() >= 18) ? "It's all right, come in!" : "This movie is not suitable for your age!";
System.out.println(securityAnswer);
}
这就是这位操作员的工作样子。它被称为三元(三重),因为 3 个组件参与其工作:
- 一个条件 (
man.getAge() >= 18
) - 两种可能的结果(“没关系,继续吧!”和“这部电影不适合你的年龄!”)
man.getAge() >= 18 ?
“此人的年龄是否大于或等于18岁?” 以下是第一个结果。如果条件返回true
,即为真,则触发:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!"
此人的年龄是否大于或等于 18 岁?如果是,则为该变量分配 securityAnswer
值“一切都很好,请进来!” 。 接下来是“ :
”运算符,其后写入第二个结果。如果条件返回false
,即为 false,则触发:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";
此人的年龄是否大于或等于 18 岁?如果是,则为该变量分配 securityAnswer
值“一切都很好,请进来!” 。如果不是,则为变量分配 securityAnswer
值“这部电影不适合你的年龄!” 这就是三元运算符的一般逻辑。健康)状况 ?结果 1: 结果 2 顺便说一下,没有必要在条件两边加上括号:我们这样做是为了提高可读性。没有它们它也能工作:
public static void main(String[] args) {
Man man = new Man(22);
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";
System.out.println(securityAnswer);
}
您应该使用什么:if-else
或三元运算符?就性能而言,没有太大区别。更准确地说,它可能存在,但微不足道。这里的问题与代码的可读性有关。这在编程中极其重要:你编写的代码不仅必须正确运行,而且必须易于阅读。毕竟,它可以“继承”给其他程序员、你的同事!如果很难理解,他们和你的工作都会变得复杂——他们每 5 分钟就会跑来向你寻求解释。一般性建议可能听起来像这样:如果条件简单且易于检查,则可以使用三元运算符而不会造成任何损害。通过这种方式,您将减少代码量和检查次数if-else
,其中可能已经有很多了。但如果条件复杂且多阶段,最好使用if-else
。例如,在这种情况下,使用三元运算符是一个坏主意:
String securityAnswer = (man.getAge() >= 18 && (man.hasTicket() || man.hasCoupon()) && !man.hasChild()) ? "Come in!" : "You can not pass!";
所以你不会立即明白这里发生了什么!代码变得非常难以阅读。而这一切都是因为一个困难的条件:
- 如果一个人年满18岁+有门票(或有免费入场券)+没有小孩 - 那么他们可以通过。
- 如果条件的至少一部分返回 false,则不能。
if-else
。是的,我们的代码会更大,但可读性会提高很多倍。如果你的同事继承了这样的代码,他们也不会惊慌失措:)最后,我可以向你推荐这本书。在讲座中,我们谈到了代码可读性的主题。罗伯特·马丁 (Robert Martin) 的经典著作《干净的代码》就是献给她的。 它包含针对程序员的最佳实践和建议,使您不仅可以编写可用的代码,而且可以编写易于阅读的代码。 JavaRush 上有这本书的评论。
GO TO FULL VERSION