El operador ternario (condicional) devuelve un valor. Si sus métodos no lo hacen, no pueden usarse como partes del operador (donde toma el valor).
Para entenderlo mejor, pensemos en un simple operador binario: +
. Funciona de esta manera:
<eval1> + <eval2> --> <value>
Necesita de 2 partes evaluables y devuelve otra. Si escribió
doThis() + doThat();
o incluso
gimmeAValue = doThis() + doThat();
que fracasaría, ya que ni doThis()
ni doThat()
evaluar a cualquier cosa (que "retorno" void
). Por supuesto, tanto <eval1>
como <eval2>
deben ser de algún tipo "compatible" para que el operador +
pueda manejarlos y devolver un valor de algún tipo.
Ahora vamos a ver el operador ternario:
<evalBoolean> ? <eval1> : <eval2> --> <value>
Se tarda de 3 partes evaluables, y devuelve un valor.
La primera parte evaluable debe ser comprensible (moldeable) por el compilador como un booleano. Se usará para decidir cuál de las otras 2 partes evaluables debe devolverse.
Las otras dos partes evaluables deben ser, bueno ... evaluables. A algo. De algún tipo.
En otras palabras: el operador condicional ternario está destinado a devolver algo, no como código de bifurcación. Usado de esta manera:
gimmeAValue = testMe() ? returnThis() : returnThat();
No, no así. Solo usa un 'si' como una persona normal. –
Creo que el operador ternario debe asignar valores a una instancia de un tipo, con una comprobación de condición. la forma en que lo sugiere no cumple con el formato. –
@codesparkle - no hay mucho espacio. if (condición) {doThis();} else {doThat();} – tehdoommarine