He estado trabajando con Java un par de años, pero hasta hace poco no me había encontrado con esta construcción:
int count = isHere ? getHereCount(index) : getAwayCount(index);
Esta es probablemente una pregunta muy simple, pero ¿alguien puede explicarla? ¿Cómo lo leo? Estoy bastante seguro de saber cómo funciona.
- si
isHere
es verdad,getHereCount()
se llama - si
isHere
es falsogetAwayCount()
se llama
¿Correcto? ¿Cómo se llama esta construcción?
java
syntax
ternary-operator
conditional-operator
cuerdas principales
fuente
fuente
Respuestas:
Sí, es una forma abreviada de
Se llama el operador condicional . Muchas personas (erróneamente) lo llaman el operador ternario , porque es el único operador ternario (tres argumentos) en Java, C, C ++ y probablemente muchos otros lenguajes. Pero teóricamente podría haber otro operador ternario, mientras que solo puede haber un operador condicional .
El nombre oficial se proporciona en la Especificación del lenguaje Java :
Tenga en cuenta que ambas ramas deben conducir a métodos con valores de retorno:
Entonces, si
doSomething()
ydoSomethingElse()
son métodos nulos, no puede comprimir esto:dentro de esto:
Palabras simples:
fuente
the
en la cursiva dethe ternary operator
, y eso es lo que quiere decir que es erróneo, noternary operator
es erróneo. El operador ternario implica que, como dice Michael, es el único, que a su vez podría llevar a suponer que no puede haber otros operadores ternarios, que es lo que Michael está diciendo es errónea, y yo estaría de acuerdo, que podría ser Una suposición errónea.Otros han respondido esto en un grado razonable, pero a menudo con el nombre de "operador ternario".
Siendo el pedante que soy, me gustaría dejar en claro que el nombre del operador es el operador condicional o "operador condicional?:". Es un operador ternario (ya que tiene tres operandos) y por el momento es el único operador ternario en Java.
Sin embargo, la especificación es bastante clara de que su nombre es el operador condicional o "operador condicional?:" Para ser absolutamente inequívoco. Creo que es más claro llamarlo por ese nombre, ya que indica el comportamiento del operador hasta cierto punto (evaluar una condición) en lugar de cuántos operandos tiene.
fuente
&&
al condicional-y operador, y||
al condicional-u operador, pero usa solo "el operador condicional" para?:
.De acuerdo con la especificación Sun Java , se llama Operador condicional. Ver sección 15.25. Tienes razón en cuanto a lo que hace.
El operador condicional? : utiliza el valor booleano de una expresión para decidir cuál de las otras dos expresiones debe evaluarse.
El operador condicional es sintácticamente asociativo a la derecha (agrupa de derecha a izquierda), de modo que a? B: c? D: e? F: g significa lo mismo que a? B: (c? D: (e? F :gramo)).
El operador condicional tiene tres expresiones de operando; ? aparece entre la primera y la segunda expresión, y: aparece entre la segunda y la tercera expresión.
La primera expresión debe ser de tipo booleano o booleano, o se produce un error en tiempo de compilación.
fuente
significa:
fuente
No es exactamente correcto, para ser precisos:
Ese "regreso" es muy importante. Significa que los métodos deben devolver un valor y ese valor debe asignarse en alguna parte.
Además, no es exactamente equivalente sintácticamente a la versión if-else. Por ejemplo:
Si se codifica con if-else siempre dará como resultado más bytecode.
fuente
Ternario, condicional; tomate, tomateh. Lo que es realmente valioso es la inicialización variable. Si (como a mí) le gusta inicializar las variables donde están definidas, el operador ternario condicional (porque es ambos) le permite hacerlo en los casos en que exista una condicionalidad sobre su valor. Particularmente notable en los campos finales, pero útil también en otros lugares.
p.ej:
Sin ese operador, por cualquier nombre, tendría que hacer que el campo no sea definitivo o escribir una función simplemente para inicializarlo. En realidad, eso no está bien: todavía se puede inicializar usando if / else, al menos en Java. Pero encuentro este limpiador.
fuente
Si la condición es
true
entonces, evalúe la primera expresión. Si la condición esfalse
, evalúe la segunda expresión.Se llama Operador Condicional y es un tipo de Operación Ternaria .
fuente
Este constructo se llama Operador ternario en informática y técnicas de programación.
Y Wikipedia sugiere la siguiente explicación:
No solo en Java, esta sintaxis está disponible en PHP, Objective-C también.
En el siguiente enlace da la siguiente explicación, lo cual es bastante bueno para entenderlo:
Esto podría ser legible para algunas condiciones lógicas que no son demasiado complejas, de lo contrario es mejor usar el bloque If-Else con la combinación prevista de lógica condicional.
Podemos simplificar los bloques If-Else con este operador ternario para una línea de instrucción de código.
Por ejemplo:
Podría ser igual a lo siguiente:
Entonces, si nos referimos a su declaración:
En realidad, es el 100% equivalente del siguiente bloque If-Else :
¡Eso es!
¡Espero que esto haya sido útil para alguien!
¡Salud!
fuente
Correcto. Se llama el operador ternario . Algunos también lo llaman el operador condicional .
fuente
Su operador ternario (? :)
fuente
Quizás le interese una propuesta para algunos operadores nuevos que sean similares al operador condicional. Los operadores de seguridad nula habilitarán un código como este:
Sería especialmente conveniente donde se realiza el desempaquetado automático.
Ha sido seleccionado para mayor consideración bajo "Proyecto Moneda" de JDK 7.
fuente
En realidad, puede tomar más de 3 argumentos. Por ejemplo, si queremos verificar si un número es positivo, negativo o cero, podemos hacer esto:
que es mejor que usar if, else if, else.
fuente
Es el operador condicional, y es más que una forma concisa de escribir declaraciones if.
Dado que es una expresión que devuelve un valor, puede usarse como parte de otras expresiones.
fuente
Sí, estás en lo correcto. ?: normalmente se denomina "operador condicional ternario", a menudo denominado simplemente "operador ternario". Es una versión abreviada del estándar condicional if / else.
Operador Condicional Ternario
fuente
Realmente me gusta este operador, pero el lector debe tenerse en cuenta.
Siempre debe equilibrar la compacidad del código con el tiempo dedicado a leerlo, y en eso tiene algunos defectos bastante graves.
En primer lugar, está el caso del Original Asker. Solo pasó una hora publicando sobre eso y leyendo las respuestas. ¿Cuánto tiempo le habría llevado al autor escribir cada una ?: como si / luego a lo largo de toda su vida. Ni una hora para estar seguro.
En segundo lugar, en lenguajes tipo C, tienes el hábito de simplemente saber que los condicionales son lo primero en la línea. Me di cuenta de esto cuando estaba usando Ruby y encontré líneas como:
Si fuera un usuario de Ruby desde hace mucho tiempo, probablemente no habría tenido un problema con esta línea, pero viniendo de C, cuando ve "callMethodWhatever" como lo primero en la línea, espera que se ejecute. El?: Es menos críptico, pero sigue siendo lo suficientemente inusual como para sorprender al lector.
La ventaja, sin embargo, es una sensación realmente genial en su barriga cuando puede escribir una declaración if de 3 líneas en el espacio de 1 de las líneas. No puedo negar eso :) Pero, sinceramente, no necesariamente es más legible para el 90% de las personas simplemente por su rareza.
Cuando es realmente una tarea basada en un valor booleano y valores, no tengo ningún problema con él, pero se puede abusar fácilmente.
fuente
Las expresiones condicionales están en un estilo completamente diferente, sin explícito si en la declaración.
La sintaxis es: expresión-booleana? expresión1: expresión2;
El resultado de esta expresión condicional es
expresión1 si expresión-booleana es verdadera;
de lo contrario, el resultado es expresión2.
Suponga que desea asignar el mayor número de variables num1 y num2 a máx. Simplemente puede escribir una declaración usando la expresión condicional: max = (num1> num2)? num1: num2;
Nota: los símbolos? y: aparecen juntos en una expresión condicional. Forman un operador condicional y también se llaman operador ternario porque utiliza tres operandos. Es el único operador ternario en Java.
Citado de: Introducción a la 10ª edición de Java Programming por Y. Daniel Liang, página 126 - 127
fuente