[英]Java/C Ternary Operator
我想将代码从if条件转换为三元条件,首先我已经成功地将一个条件转换为:
int minutes=59,hours=23;
// 1) if condition
if (minutes<59)
minutes++;
else
minutes=0;
// 2) ternary condition
minutes = (minutes < 59) ? minutes+1 : 0;
现在的问题是,当我要编辑多个值时,例如:
int minutes=59,hours=23;
// if condition
if (minutes<59)
minutes++;
else
{
minutes = 0;
if (hours<23)
hours++;
else
hours=0;
}
您如何看待三元条件? 谢谢 :)
我认为这是您不应该这样做。
但是,如果您确实愿意,可以编写以下代码:
minutes = (minutes < 59)
? (minutes+1)
: ((hours = (hours < 23) ? (hours+1) : 0), 0);
但是不要。
“ 那就不要那样做。 ”
这是不恰当的,甚至是不可能的 ,所有改造的if-then构造来?:
构建,Java或C.(这是可能的函数式编程语言,但即使如此,它并不总是劝)
对于您似乎想做的事情,我会写
minutes++;
if (minutes == 60) { minutes = 0; hours++; }
if (hours == 24) { hours = 0; days++; }
// etcetera
多重三元条件令人痛苦! 只是不...
不确定要执行的操作,但是如果需要四舍五入,您可能需要查看DateUtils
。
我认为执行此操作的首选方式是
minutes = minutes == 59 ? 0 : minutes + 1;
if (minutes == 0) {
hours = hours == 23 ? 0 : hours + 1;
}
您可以避免嵌套的ifs的可读性问题,但不要疯狂地执行三元声明。 我认为,简洁和可读性之间的最佳平衡。
当您想将条件嵌入较大的表达式中时,尽管三元运算符是一个很好的简写,但过度使用它不是很好。 它会使事情变得不那么可读,也不一定会加快代码的速度。 然而...
您可以使用逗号运算符组合表达式(该值将是最后一个表达式的值)。 您的示例可以如下重写:
minutes = (minutes < 59) ?
minutes + 1 :
( hours < 23 ?
(hours++, 0) :
(hours = 0) );
尽管对于您给出的示例,使用模数运算符hours
可以将其简化如下:
hours = (minutes = (minutes + 1) % 60) ? hours : ((hours + 1) % 24);
..因为赋值的结果是C中赋值的值,因此您可以将其用作测试表达式。
这适用于C ...不确定Java。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.