El operador condicional se admite en muchos lenguajes de programación . Este término generalmente se refiere a ?:
C, C ++, C #, Python y JavaScript. Sin embargo, en Java, este término también puede referirse a &&
y ||
.
&& y ||
En algunos lenguajes de programación, por ejemplo, Java, el término operador condicional se refiere a operadores booleanos de cortocircuito &&
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 del operador bit a bit
&
y |
son operadores bit a bit que ocurre en muchos lenguajes de programación. La principal diferencia es que las operaciones bit a bit operan en los bits individuales de un número binario, mientras que los operadores condicionales operan en operaciones lógicas. Además, siempre se evaluarán las expresiones anteriores y posteriores a un operador bit a bit.
if ( expresión1 || expresión2 || expresión3 )
Si la expresión 1 es verdadera, las expresiones 2 y 3 NO se comprobarán.
if ( expresión1 | expresión2 | expresión3 )
Esto verificará las expresiones 2 y 3, incluso si 1 ya es verdadera.
Los operadores de cortocircuito pueden reducir el tiempo de ejecución al evitar llamar a funciones posteriores. También pueden evitar la excepción nula si la expresión 1 verifica si un objeto es válido.
Uso en Java
class ConditionalDemo1 { public static void main ( String [] args ) { int value1 = 1 ; int value2 = 2 ; if (( valor1 == 1 ) && ( valor2 == 2 )) Sistema . fuera . println ( "valor1 es 1 Y valor2 es 2" ); si (( valor1 == 1 ) || ( valor2 == 1 )) Sistema . fuera . println ( "valor1 es 1 O valor2 es 1" ); } }
"?:"
En la mayoría de los lenguajes de programación, ?: Se llama operador condicional. Es un tipo de operador ternario . Sin embargo, el operador ternario en la mayoría de las situaciones se refiere específicamente a ?: Porque es el único operador que toma 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 usando 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, asigne el valor de la expresión 1 al resultado. De lo contrario, asigne el valor de la expresión 2 al resultado".
Propiedad de asociación
El operador condicional es asociativo a la derecha, lo que significa que las operaciones se agrupan de derecha a izquierda. Por ejemplo, una expresión de la forma a? antes de Cristo ? d: e se evalúa como a? b: (c? d: e). [2]
Ejemplos por idiomas
Java
class ConditionalDemo2 { public static void main ( String [] args ) { int value1 = 1 ; int value2 = 2 ; resultado int ; boolean someCondition = true ; resultado = alguna condición ? valor1 : valor2 ; Sistema . fuera . println ( resultado ); } }
En este ejemplo, debido a que someCondition es verdadera, este programa imprime "1" en la pantalla. Utilice el operador?: En lugar de una instrucción if-then-else si hace que su código sea más legible; por ejemplo, cuando las expresiones son compactas y sin efectos secundarios (como asignaciones).
C ++
#include 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 enumerativo, 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 de puntero y el otro es una expresión constante que se 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 de tipo void
- Si ambos operandos son del mismo tipo definido por el usuario, el tipo común es ese tipo. [4]
C#
// condición? first_expression: second_expression;static double sinc ( doble x ) { return x ! = 0.0 ? Matemáticas . Sin ( x ) / x : 1,0 ; }
Hay varias reglas que se aplican al segundo y tercer operandos en C #:
- Si x tiene el tipo X e y tiene el tipo Y, entonces
- Si existe una conversión implícita (conversiones implícitas) de X a Y, pero no de Y a X, entonces Y es el tipo de expresión condicional.
- Si existe una conversión implícita (conversiones implícitas) de Y a X, pero no de X a Y, entonces X es el tipo de 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, de son implícitamente convertibles a ese tipo, entonces ese 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" ; consola . log ( bebida ); // "Cerveza"
El operador condicional de JavaScript es compatible con los siguientes navegadores:
Chrome , Edge , Firefox (1), Internet Explorer , Opera , Safari , vistaweb Android, Chrome para Android , Mobile Edge , 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 a la derecha, lo que significa que se puede "encadenar" de la siguiente manera, similar a una cadena if ... else if ... else if ... else. [4]
Ejemplos por idiomas
JavaScript
ejemplo de función ( … ) { return condition1 ? valor1 : condición2 ? valor2 : condición3 ? valor3 : valor4 ; }// Equivalente a:función ejemplo ( ... ) { si ( condición1 ) { retorno valor1 ; } Demás si ( condición2 ) { retorno valor2 ; } Demás si ( Condition3 ) { retorno valor3 ; } Demás { retorno valor4 ; } }
C / C ++
const doble a = expresión1 ? a1 : expresión2 ? a2 : expresión3 ? a3 : / * en caso contrario * / a4 ;// Equivalente a:doble a ; if ( expresión1 ) a = a1 ; else if ( expresión2 ) a = a2 ; else if ( expresión3 ) a = a3 ; else / * en caso contrario * / a = a4 ;
Uso especial en expresión 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 consideran este estilo extremadamente pobre, aunque solo sea por la oscuridad de la técnica. [6]
C / C ++
(( foo ) ? bar : baz ) = frink ;// equivalente a: if ( foo ) bar = frink ; else baz = frink ;
Ver 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 .
- ^ a b c 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 .
- ^ a b mikeblome. "Operador condicional:?:" . docs.microsoft.com . Consultado el 29 de abril de 2019 .
- ^ "DevDocs" . devdocs.io . Consultado el 29 de abril de 2019 .
- ^ "Operador condicional" . wiki.c2.com . Consultado el 29 de abril de 2019 .