使用具有4个表达式的三元运算符

Bra*_*man 11 java variables null ternary-operator

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

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
    }
}
Run Code Online (Sandbox Code Playgroud)

或者我最好还是选择经典......

if (color != null) {
    messageColor = color;
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*dge 24

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

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

在这种情况下,如果将代码分成大约5个if/else行,代码将不太可读.

我通常在整个运算符周围放置括号,以便在读取它时我会将其作为单个值进行心理解析.

 messageColor = (color != null ? color : messageColor); 
Run Code Online (Sandbox Code Playgroud)

另一种变体是

messageColor = color || messageColor;
Run Code Online (Sandbox Code Playgroud)

在某些语言中,哪种语言将评估为"颜色,除非颜色评估为"false",在这种情况下,messageColor的值.在我看来,这应该避免,因为它可能会让人感到困惑.

最重要的是保持一致,以便下一个阅读代码的人(即使是你)具有最小的认知开销.