¿Cómo es que esto no es posible? Estoy recibiendo un comienzo de expresión ilegal.? El operador no funciona
(s1.charAt(i) == ' ') ? i++ : break;
¿Cómo es que esto no es posible? Estoy recibiendo un comienzo de expresión ilegal.? El operador no funciona
(s1.charAt(i) == ' ') ? i++ : break;
Lo que hay que entender aquí es que el :? operador se utiliza para un valor de retorno. Básicamente está llamando a una función que se ve así en esa línea:
anonymous function:
if(s1.charAt(i) == ' '):
return i++;
else:
return break;
No tiene sentido, ¿verdad? El operador ?: solo se diseñó como una abreviatura para declaraciones de devolución if/else como la anterior, no como un reemplazo de if/else en conjunto.
El operador ternario es una expresión, no una afirmación. Use if ... else ...
para esto.
No se puede usar break
en parte de una expresión condicional ternaria ya que break
no es una expresión en sí misma, sino solo una sentencia de control de flujo.
¿Por qué no usar simplemente un constructo if-else en su lugar?
if (s1.charAt(i) == ' ') {
i++;
} else {
break;
}
Por supuesto que funciona. Pero es un operador. ¿Desde cuándo fue una declaración como 'romper' un operando?
Recomiendo evitar el operador ternario (? :) EXCEPTO para asignaciones simples. En mi carrera, he visto demasiados operadores ternarios anidados locos; se convierten en un dolor de cabeza de mantenimiento (más sobrecarga cognitiva - "¡no me hagas pensar!").
No los prohibo en mis equipos, pero recomiendo que se utilicen con criterio. Usarse con cuidado que son más limpios que la correspondiente construcción if/else: -
public int ifFoo() {
int i;
if(isSomethingTrue()) {
i = 5;
}
else {
i = 10;
}
return i;
}
En comparación con la alternativa ternaria: -
public int ternaryFoo() {
final int i = isSomethingTrue()
? 5
: 10;
return i;
}
La versión ternario es: -
'return isSomethingTrue()? 5: 10; 'es muuucho más claro que 10 líneas si la declaración y esa variable local inútil. – whiskeysierra
Solo pongo la variable local para poder hacer un punto de interrupción en esa línea si alguna vez tengo que depurar. No muy preocupado, de cualquier manera! –
La variable puede ser definitiva en cualquier caso, en la medida en que esté asignada mediante todas las rutas de código antes de su uso. – EJP
¿funciona esto si lo tiene en un ciclo [while, for, w/e]? – sova