Использование оператора?: Должно быть ограничено, чтобы сделать код более читабельным. Классический пример:
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. На мой взгляд, этого следует избегать, поскольку это может смутить людей.
Самое важное - быть последовательным, чтобы у следующего человека, читающего ваш код (даже если это вы), были минимальные когнитивные издержки.