繁体   English   中英

Java / C三元运算符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM