Absolutamente não é mau. De fato, é puro , e se-então-outro não é.
Em linguagens funcionais como Haskell, F #, ML etc., são as declarações if-then-else que são consideradas más.
A razão para isso é que qualquer "ação", como uma instrução imperativa se-então-outro, exige que você separe uma declaração variável de sua definição e introduza estado em sua função.
Por exemplo, no seguinte código:
const var x = n % 3 == 1
? Parity.Even
: Parity.Odd;
vs.
Parity x;
if (n % 3 == 1)
x = Parity.Even;
else
x = Parity.Odd;
O primeiro tem duas vantagens além de ser mais curto:
x
é uma constante e, portanto, oferece muito menos chances de introduzir bugs, e pode ser otimizado de maneiras que o segundo nunca poderia ser.
- O tipo é esclarecido pela expressão, para que o compilador possa deduzir sem esforço que
x
precisa ser do tipo Parity
.
De maneira confusa, nas linguagens funcionais, o operador ternário costuma ser chamado se-então-outro. Em Haskell, você pode dizer x = if n mod 3 == 1 then Odd else Even
.