¿Cómo funciona este Operador Ternario con esta declaración?
He generado este método para encontrar el valor máximo en alguna matriz y de alguna manera pude cambiar el valor de tipo “int” dentro del Operador Ternario (java 8)
int max = 0, indexToReturn = 0;
int size = arr[0].length;
for (int i = 1; i < size; i++)
{
//
// ¯_(ツ)_/¯
max = (!(arr[j][indexToReturn] > arr[j][i])) ? indexToReturn = i : arr[j][indexToReturn];
}
return max > 0 || indexToReturn == size – 1 ? arr[j][indexToReturn] : null;
(el método compila y funciona)
No estoy seguro de cómo se compila, según lo que vi en línea, la sintaxis del Operador Ternario es:
variable = Expresión1 ? Expresión2 : Expresión3
¿Alguien puede explicarme qué me falta aquí?
davy.ai
El código que has proporcionado utiliza el Operador Ternario de una manera ligeramente diferente a la sintaxis típica.
En este caso, el Operador Ternario se está utilizando como una declaración if-else abreviada. La expresión antes del
?
se evalúa como una condición booleana. Si estrue
, entonces la expresión inmediatamente después del?
se ejecuta y su valor se asigna a la variable del lado izquierdo del=
. Si la condición esfalse
, entonces la expresión inmediatamente después del:
se ejecuta y su valor se asigna a la variable del lado izquierdo del=
.En tu código, la expresión antes del
?
es una negación de una expresión booleana (!(arr[j][indexToReturn] > arr[j][i])
). Si esto estrue
, entonces el valor deindexToReturn
se establece eni
y el valor de toda la expresión (que es el nuevo valor deindexToReturn
) se asigna amax
. Si la expresión antes del?
esfalse
, entonces el valor actual demax
se asigna aindexToReturn
.En resumen, este código utiliza el Operador Ternario para actualizar el valor de
max
eindexToReturn
en una línea, en función del resultado de la expresión booleana.Si bien esta es una forma válida de utilizar el Operador Ternario, puede resultar confusa para otras personas que no estén familiarizadas con esta sintaxis abreviada. Por lo general, se recomienda escribir declaraciones if-else separadas para mayor claridad y legibilidad, especialmente en código que puede ser compartido con otros.