这是可接受的编码实践吗?

public class MessageFormat {
    private static final Color DEFAULT_COLOR = Color.RED;

    private Color messageColor = DEFAULT_COLOR;

    public MessageFormat(Person person) {
        Color color = person.getPreferredColor();
        messageColor = (color != null) ? color : messageColor; // this line
    }
}

还是我最好选择经典的...
if (color != null) {
    messageColor = color;
}

最佳答案

应限制使用?:运算符以使代码更具可读性。一个经典的例子:

a = sprintf( "There are %i green bottle%s on the wall.", i, (i==1?"":"s") );

在这种情况下,如果将代码分成大约5条if/else行,则代码的可读性将降低。

我通常将括号括在整个运算符上,以便在阅读时可以从心理上将其解析为单个值。
 messageColor = (color != null ? color : messageColor);

另一个变体是
messageColor = color || messageColor;

在某些语言中,哪一种颜色的计算结果为“颜色”,除非颜色的计算结果为“假”,在这种情况下为messageColor的值。

最重要的是保持一致,这样,下一个阅读您的代码的人(即使是您)也可以将认知开销降至最低。

07-26 00:37