我无法破译这段代码。我遇到了像这样复杂的退货声明,有人可以为我分解吗? (此代码来自我必须区分闰年和非闰年的问题)。谢谢!
return ((year % 4) || (!(year % 100) && ((year+300) % 400))) ? 28 : 29;
答案 0 :(得分:3)
这只是一个条件表达式,condition ? true_value : false_value
。
如果你把条件分开,那就更清楚了:
bool not_leap_year = (year % 4) || (!(year % 100) && ((year+300) % 400));
return not_leap_year ? 28 : 29;
然而,计算条件的否定更为常见,因为 闰年的规则比没有闰年的规则更为人所知(因此不太可能错误)。
bool leap_year = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
return leap_year ? 29 : 28;
答案 1 :(得分:1)
False
这是具有相对复杂的布尔表达式的三元运算符((year % 4) || (!(year % 100) && ((year+300) % 400))) ? 28 : 29;
。您可以使用if表达式实现相同的目的:
?
使用辅助函数可以使其更具可读性:
if ( (year % 4) // year not dividable by 4
or
(
not (year % 100) // year dividable by 100
and
((year+300) % 400))) // year + 300 not dividable by 400
{
return 28;
}
else
{
return 29;
}