El operador condicional se admite en muchos lenguajes de programación . Este término suele referirse a ?:como en C, C++, C# y JavaScript. Sin embargo, en Java, este término también puede referirse a &&y ||.
&& y ||
En algunos lenguajes de programación, como Java, el término operador condicional se refiere a operadores booleanos de circuito corto && y ||. La segunda expresión se evalúa solo cuando la primera expresión no es suficiente para determinar el valor de toda la expresión. [1]
Diferencia con el operador bit a bit
&y |son operadores bit a bit que se utilizan en muchos lenguajes de programación. La principal diferencia es que las operaciones bit a bit operan sobre los bits individuales de un numeral binario, mientras que los operadores condicionales operan sobre operaciones lógicas. Además, las expresiones anteriores y posteriores a un operador bit a bit siempre se evalúan.
si ( expresión1 || expresión2 || expresión3 )
Si la expresión 1 es verdadera, las expresiones 2 y 3 NO se comprueban.
si ( expresión1 | expresión2 | expresión3 )
Esto verifica las expresiones 2 y 3, incluso si la expresión 1 es verdadera.
Los operadores de cortocircuito pueden reducir los tiempos de ejecución al evitar cálculos innecesarios. También pueden evitar excepciones nulas cuando la expresión 1 verifica si un objeto es válido.
Uso en Java
clase ConditionalDemo1 {
public static void main ( String [] args ) { int valor1 = 1 ; int valor2 = 2 ; if (( valor1 == 1 ) && ( valor2 == 2 )) System . println ( " valor1 es 1 Y valor2 es 2" ) ; if (( valor1 == 1 ) || ( valor2 == 1 )) System . println ( " valor1 es 1 O valor2 es 1" ); } }
"?:"
En la mayoría de los lenguajes de programación, ?: se denomina operador condicional. Es un tipo de operador ternario . Sin embargo, en la mayoría de las situaciones, el operador ternario se refiere específicamente a ?: porque es el único operador que acepta tres operandos. [2]
Uso habitual de "?:"
?:Se utiliza en expresiones condicionales. Los programadores pueden reescribir una expresión if-then-else de una manera más concisa utilizando el operador condicional. [3]
Sintaxis
condición ? expresión 1 : expresión 2
condición: Una expresión que se evalúa como un valor booleano .
expresión 1, expresión 2: Expresiones con valores de cualquier tipo.
Si la condición se evalúa como verdadera, se evaluará la expresión 1. Si la condición se evalúa como falsa, se evaluará la expresión 2.
Debe leerse como: "Si la condición es verdadera, asigna el valor de la expresión 1 al resultado. De lo contrario, asigna el valor de la expresión 2 al resultado".
Propiedad de la asociación
El operador condicional es asociativo por la derecha, lo que significa que las operaciones se agrupan de derecha a izquierda. Por ejemplo, una expresión de la forma a ? b : c ? d : e se evalúa como a ? b : (c ? d : e). [2]
Ejemplos por idiomas
Java
clase ConditionalDemo2 {
public static void main ( String [] args ) { int valor1 = 1 ; int valor2 = 2 ; int resultado ; booleano algunaCondición = verdadero ; resultado = algunaCondición ? valor1 : valor2 ;
Sistema . out . println ( resultado );
} }
En este ejemplo, como someCondition es verdadero, este programa imprime "1" en la pantalla. Utilice el operador ?: en lugar de una declaración if-then-else si esto hace que su código sea más legible; por ejemplo, cuando las expresiones son compactas y sin efectos secundarios (como asignaciones).
C++
#include <flujo de datos>
int main () { int x = 1 ; int y = 2 ; std :: cout << ( x > y ? x : y ) << " es el mayor de los dos." << std :: endl ; }
Hay varias reglas que se aplican al segundo y tercer operandos en C++:
- Si ambos operandos son del mismo tipo, el resultado es de ese tipo.
- Si ambos operandos son de tipo aritmético o de enumeración, se realizan las conversiones aritméticas habituales (cubiertas en Conversiones estándar) para convertirlos a un tipo común.
- Si ambos operandos son de tipo puntero o si uno es un tipo puntero y el otro es una expresión constante que evalúa a 0, se realizan conversiones de puntero para convertirlos a un tipo común.
- Si ambos operandos son de tipos de referencia, se realizan conversiones de referencia para convertirlos a un tipo común
- Si ambos operandos son de tipo void, el tipo común es el tipo void
- Si ambos operandos son del mismo tipo definido por el usuario, el tipo común es ese tipo. [4]
DO#
// condición ? primera_expresión : segunda_expresión;
static double sinc ( double x ) { devuelve x ! = 0.0 ? Math.Sin ( x ) / x : 1.0 ; }
Hay varias reglas que se aplican al segundo y tercer operandos x e y en C#:
- Si x tiene tipo X e y tiene tipo Y:
- Si existe una conversión implícita de X a Y pero no de Y a X, Y es el tipo de la expresión condicional.
- Si existe una conversión implícita de Y a X pero no de X a Y, X es el tipo de la expresión condicional.
- De lo contrario, no se puede determinar ningún tipo de expresión y se produce un error en tiempo de compilación.
- Si solo uno de x e y tiene un tipo, y tanto x como y son implícitamente convertibles a ese tipo, ese tipo es el tipo de la expresión condicional.
- De lo contrario, no se puede determinar ningún tipo de expresión y se produce un error en tiempo de compilación. [2]
JavaScript
var edad = 26 ; var bebida = ( edad >= 21 ) ? "Cerveza" : "Jugo" ; console . log ( bebida ); // "Cerveza"
El operador condicional de JavaScript es compatible con los siguientes navegadores:
Chrome , Edge , Firefox (1), Internet Explorer , Opera , Safari , Android webview, Chrome para Android , Edge Mobile , Firefox para Android (4), Opera para Android, Safari en IOS, Samsung Internet , Node.js. [5 ]
Uso especial en cadena condicional
El operador ternario es asociativo por la derecha, lo que significa que se puede "encadenar" de la siguiente manera, de forma similar a una cadena if ... else if ... else if ... else. [4]
Ejemplos por idiomas
JavaScript
ejemplo de función ( … ) { return condición1 ? valor1 : condición2 ? valor2 : condición3 ? valor3 : valor4 ; }
// Equivalente a:
ejemplo de función ( … ) { if ( condición1 ) { devolver valor1 ; } else if ( condición2 ) { devolver valor2 ; } else if ( condición3 ) { devolver valor3 ; } else { devolver valor4 ; } }
C/C++
const double a = expresión1 ? a1 : expresión2 ? a2 : expresión3 ? a3 : /*de lo contrario*/ a4 ;
// Equivalente a:
doble a ; si ( expresión1 ) a = a1 ; de lo contrario si ( expresión2 ) a = a2 ; de lo contrario si ( expresión3 ) a = a3 ; de lo contrario /*de lo contrario*/ a = a4 ;
Uso especial en expresiones de asignación
El operador condicional puede producir un valor L en C/C++ al que se le puede asignar otro valor, pero la gran mayoría de los programadores considera que este es un estilo extremadamente pobre, aunque sólo sea por la oscuridad de la técnica. [6]
C/C++
(( foo ) ? bar : baz ) = frink ;
//equivalente a:
si ( foo ) bar = frink ; de lo contrario baz = frink ;
Véase también
- ?: , un operador condicional en programación informática
- Operación ternaria
- Operadores bit a bit
- operadores booleanos de cortocircuito
- Operador (programación)
Referencias
- ^ "Operadores de igualdad, relacionales y condicionales (Tutoriales de Java™ > Aprendizaje del lenguaje Java > Conceptos básicos del lenguaje)". docs.oracle.com . Consultado el 29 de abril de 2019 .
- ^ abc BillWagner. "?: Operador - Referencia de C#". docs.microsoft.com . Consultado el 29 de abril de 2019 .
- ^ "El operador ?: en Java". www.cafeaulait.org . Consultado el 29 de abril de 2019 .
- ^ de mikeblome. "Operador condicional: ? :". docs.microsoft.com . Consultado el 29 de abril de 2019 .
- ^ "Operador condicional (ternario) - JavaScript". developer.mozilla.org . Consultado el 29 de abril de 2019 .
- ^ "Operador condicional". wiki.c2.com . Consultado el 29 de abril de 2019 .