三元运算符是如何工作的
How does the ternary operator work
我不明白这段代码;
有没有人写得好,我也能看懂。
public void deleteStudentsPersistence(Student student) {
em.remove(em.contains(student) ? student : em.merge(student));
}
这是一个三元运算符,叫做条件运算符。也可以这样写:
public void deleteStudentsPersistence(Student student) {
if (em.contains(student)){
em.remove(student);
} else{
em.remove(em.merge(student));
}
}
基本上,它在删除之前检查 em 是否包含学生,否则合并它
您在此处使用的运算符称为三元运算符,它的工作方式几乎与 if-else 语句的工作方式相同。考虑以下语句:
int min = (a < b) ? a : b;
意思是:求(a < b)
的值,如果为真,则min的值为a
,否则,min的值为[=14] =]。它可以这样与 if-else 语句相关: If (a < b) is true: min = a;否则:最小值为 b.
现在回到你的问题....
em.remove(em.contains(student) ? student : em.merge(student));
这意味着如果 em.contains(student)
为真,则执行 em.remove(student)
,但如果为假,则执行 em.remove(em.merge(student))
.
PS:
显然,在许多涉及根据 two-way 条件为变量赋值的实际情况中,这可能是 if-statement 的微妙替代。 this post 中关于 "more efficient" 方法的争论很大,但我个人更喜欢使用三元运算符,因为它的语法长度和可读性相对较短。
希望对您有所帮助.. 编码愉快!
我不明白这段代码;
有没有人写得好,我也能看懂。
public void deleteStudentsPersistence(Student student) {
em.remove(em.contains(student) ? student : em.merge(student));
}
这是一个三元运算符,叫做条件运算符。也可以这样写:
public void deleteStudentsPersistence(Student student) {
if (em.contains(student)){
em.remove(student);
} else{
em.remove(em.merge(student));
}
}
基本上,它在删除之前检查 em 是否包含学生,否则合并它
您在此处使用的运算符称为三元运算符,它的工作方式几乎与 if-else 语句的工作方式相同。考虑以下语句:
int min = (a < b) ? a : b;
意思是:求(a < b)
的值,如果为真,则min的值为a
,否则,min的值为[=14] =]。它可以这样与 if-else 语句相关: If (a < b) is true: min = a;否则:最小值为 b.
现在回到你的问题....
em.remove(em.contains(student) ? student : em.merge(student));
这意味着如果 em.contains(student)
为真,则执行 em.remove(student)
,但如果为假,则执行 em.remove(em.merge(student))
.
PS:
显然,在许多涉及根据 two-way 条件为变量赋值的实际情况中,这可能是 if-statement 的微妙替代。 this post 中关于 "more efficient" 方法的争论很大,但我个人更喜欢使用三元运算符,因为它的语法长度和可读性相对较短。
希望对您有所帮助.. 编码愉快!