Diferencia entre revisiones de «Operador condicional»
m (Texto reemplazado: «<div align="justify">» por «») |
|||
(No se muestran 6 ediciones intermedias de otro usuario) | |||
Línea 1: | Línea 1: | ||
− | + | {{Definición|Nombre=Operador condicional|imagen= |concepto=Es el único operador ternario de la gramática [[C++]] y sirve para escribir expresiones condicionales}} | |
'''Operador condicional'''. Es el único operador ternario de la gramática [[C++]] y sirve para escribir expresiones condicionales. Su formato es el siguiente ''expresion1 ? expresion2 : expresion3'', expresion1 es evaluada primero, si es diferente de cero (verdadero) entonces se evalua expresion2 devolviéndose como resultado de la expresión condicional. Si expresion1 es igual a cero (falso) se evalua expresion3 y se devuelve como resultado de la expresión condicional. | '''Operador condicional'''. Es el único operador ternario de la gramática [[C++]] y sirve para escribir expresiones condicionales. Su formato es el siguiente ''expresion1 ? expresion2 : expresion3'', expresion1 es evaluada primero, si es diferente de cero (verdadero) entonces se evalua expresion2 devolviéndose como resultado de la expresión condicional. Si expresion1 es igual a cero (falso) se evalua expresion3 y se devuelve como resultado de la expresión condicional. | ||
== Sintaxis == | == Sintaxis == | ||
Línea 33: | Línea 33: | ||
*[[Operadores lógicos|Operadores lógicos]] | *[[Operadores lógicos|Operadores lógicos]] | ||
*[[Operadores de manejo de bits|Operadores de manejo de bits]] | *[[Operadores de manejo de bits|Operadores de manejo de bits]] | ||
+ | *[[Operador coma|Operador coma]] | ||
+ | *[[Operadores relacionales|Operadores relacionales]] | ||
*[[Operadores de asignación|Operadores de asignación]] | *[[Operadores de asignación|Operadores de asignación]] | ||
− | + | *[[Operadores de modelado de tipos|Operadores de modelado de tipos]] | |
+ | *[[Operadores añadidos a expresión|Operadores añadidos a expresión]] | ||
+ | *[[Operador de acceso a ámbito|Operador de acceso a ámbito]] | ||
+ | *[[Operadores de puntero|Operadores de puntero]] | ||
+ | *[[Operador new|Operador new]] | ||
+ | *[[Operador new con matrices|Operador new con matrices]] | ||
+ | *[[Errores con el operador new|Errores con el operador new]] | ||
+ | *[[Operador delete|Operador delete]] | ||
+ | *[[Operador sizeof|Operador sizeof]] | ||
+ | *[[Operador typeid|Operador typeid]] | ||
+ | *[[Operador de preproceso|Operador de preproceso]] | ||
== Fuente == | == Fuente == | ||
* [http://www.zator.com/Cpp/E4_9_6.htm Operador Condicional] | * [http://www.zator.com/Cpp/E4_9_6.htm Operador Condicional] | ||
* [http://msdn.microsoft.com/es-es/library/zakwfxx4%28v=vs.80%29.aspx Operador condicional ternario (?:)] | * [http://msdn.microsoft.com/es-es/library/zakwfxx4%28v=vs.80%29.aspx Operador condicional ternario (?:)] | ||
* [http://laurel.datsi.fi.upm.es/~rpons/personal/trabajos/curso_c/node54.html El operador ternario? (operador condicional)] | * [http://laurel.datsi.fi.upm.es/~rpons/personal/trabajos/curso_c/node54.html El operador ternario? (operador condicional)] | ||
− | |||
[[Category:Informática]] [[Category:Lenguajes_de_programación]] [[Category:Programación]] | [[Category:Informática]] [[Category:Lenguajes_de_programación]] [[Category:Programación]] |
última versión al 15:38 6 jul 2019
|
Operador condicional. Es el único operador ternario de la gramática C++ y sirve para escribir expresiones condicionales. Su formato es el siguiente expresion1 ? expresion2 : expresion3, expresion1 es evaluada primero, si es diferente de cero (verdadero) entonces se evalua expresion2 devolviéndose como resultado de la expresión condicional. Si expresion1 es igual a cero (falso) se evalua expresion3 y se devuelve como resultado de la expresión condicional.
Sumario
Sintaxis
expresion-relacional ? expr1 : expr2
Comentario
El operador condicional ? : produce un resultado. En la expresión E1 ? E2 : E3, E1 es una expresión relacional que se evalúa primero. Si el resultado es cierto, entonces se evalúa E2 y este es el resultado. En caso contrario (si E1 resulta falso), entonces se evalúa E3 y este es el resultado. Si la premisa E1 es cierta, entonces no llega a evaluarse la expresión E3.
Uso del operador condicional ? :
El operador ? : puede usarse para sustituir ciertas sentencias del tipo if-then-else, aunque puede conducir a expresiones más compactas que las correspondientes if...else. En el ejemplo que sigue, a (y) se le asigna el valor 100:
x = 10; y = x > 9 ? 100 : 200;
No es necesario poner paréntesis en la primera expresión (E1), ya que la precedencia de ? : es muy baja (justamente sobre la asignación = ). De todos modos, es aconsejable ponerlos por legibilidad.
y = (x > 9)? 100 : 200;
En caso de que E1 no sea una expresión relacional, debe ser un escalar reducible a un booleano (Conversión de tipos). Por ejemplo es válido:
int y = 6 ? 7: 8;
Aunque en este caso el resultado sería siempre y == 7 (el int 6 se se traduce en el booleano true). En ocasiones se aprovechan los efectos laterales del operador para producir un resultado. Ejemplo:
++x ? ++y : --z;
Ejemplos
Suponiendo que z e y sean Lvalues, las siguientes expresiones son equivalentes:
(x ? y : z) = 10; (x ? y = 10 : (z = 10));
El bucle que sigue imprime n elementos de una matriz, 10 por línea, con cada columna separada por un espacio y con cada línea terminada por un NL (nueva línea), incluida la última.
for (i = 0; i < n; i++) printf ("%6d%c", a[i], (i%10==9 || i==n-1) ? '\n' : ' ');
Véase también
- Operadores
- Operadores aritméticos
- Operadores lógicos
- Operadores de manejo de bits
- Operador coma
- Operadores relacionales
- Operadores de asignación
- Operadores de modelado de tipos
- Operadores añadidos a expresión
- Operador de acceso a ámbito
- Operadores de puntero
- Operador new
- Operador new con matrices
- Errores con el operador new
- Operador delete
- Operador sizeof
- Operador typeid
- Operador de preproceso