条件(三元)运算符代码样式

时间:2012-09-27 23:20:18

标签: java coding-style conventions ternary-operator conditional-operator

  

int foo = bar > baz ? bar : baz;

     

int foo = someBoolean ? bar : baz;

     
     

int foo = (bar > baz) ? bar : baz;

     

int foo = (someBoolean) ? bar : baz;

     
     

int foo = (bar > baz) ? bar : baz;

     

int foo = someBoolean ? bar : baz;

我无法决定我应该使用这三种中的哪一种。我可以:

  1. 在以下示例中不使用括号并冒不良可读性的风险:

    min[0] = min[0] > pos.x ? pos.x : 0;

  2. 始终使用括号,但有风险 短语中有些丑陋的代码:

    setValue(val + scrollBar.getBlockIncrement() * ((scrollsUp) ? -1 : 1));

  3. 介于两者之间并在有空格时使用括号 在条件中,但如果条件只是一个布尔值 变量:

    min[0] = (min[0] > pos.x) ? pos.x : 0;

    setValue(val + scrollBar.getBlockIncrement() * (scrollsUp ? -1 : 1));

3 个答案:

答案 0 :(得分:5)

Oracles Code Conventions陈述以下内容

return (condition ? x : y);

..还有

if (a == b && c == d)     // AVOID!
if ((a == b) && (c == d)) // RIGHT

...自由翻译为

return (someBoolean ? x : y);
return ((x > y) ? x : y);

..虽然在个人意见上我不介意放宽一两个括号。 最后,它仍然是一个主观问题。如果您觉得添加/删除括号提供了更好的可读性,那么请务必随意这样做。

答案 1 :(得分:1)

清晰度对我的情况有所规定,所以我选择:

int foo = (bar > baz) ? bar : baz;
int foo = (someBoolean) ? bar : baz;

答案 2 :(得分:0)

我个人更喜欢案例2:

     int foo = (bar > baz) ? bar : baz;

    int foo = (someBoolean) ? bar : baz;

条件在括号内。

这段代码

 int foo = bar > baz ? bar : baz;

会影响可读性但会完美编译。 buti认为将测试条件放在括号中会更好以便于阅读。 但是我会说它主要取决于人的编码风格。非正常的,所有三种情况都可以正常工作:)