[C con Clase] La prioridad del operador ?:
Jubei
jubeihendrix en gmail.com
Dom Mayo 30 10:27:51 CEST 2010
Buenas Giancarlo ( y a quien le interese :), ahí mi aportación:
El operador ternario [?] tiene una forma de funcionar sencilla
[1] condición ? [2] verdad : [3] mentira
Pero creo que te has liado por lo siguiente: lo normal es que en [2] y [3] pongas un valor
que quieres asignar a una variable en función de la evaluación de [1] y lo asignes de la
siguiente manera:
variable = condición ? verdad : mentira
p.e.
var = a > b ? 5 : 3;
que es lo mismo que:
p.e.
if( condición ) | if( a > b)
variable = verdad; | var = 5;
else | else
variable = mentira; | var = 3
Sin embargo lo que has hecho es escribir una sentencia dónde típicamente debería haber un resultado,
según interpreto de tus intenciones.
Lo que hace exáctamente tu código es:
if( condición )
No Pasa Nada !!!;
else
a = 3;
dicho de otro modo:
if( ! condición )
a = 3;
Desglosando tu ejemplo ( dónde a = 1 , b = 2 ):
if( ! ( a > b ) ) ... ! ( 1 > 2 ) => No False => True | código... a > b ? b : a = 3
a = 3;
>> a vale 3
if( ! ( a > b ) ) ... ! ( 3 > 2 ) => No True => False | código... a > b ? b : a = 5
a = 5;
>> a sigue valiendo 3
>> b nunca modificó su valor que es 2
Lo que has hecho al final es todavía más rebuscado:
( a > b ? b : a ) = 3;
que quiere decir: asigna 3 a lo que devuelva la expresión, que sería:
if( 1 > 2 ) ( a==1, b == 2 )
return b;
else
return a
>> asignó 3 a la variable a
y luego
( a > b ? b : a ) = 5 => asigna 5 a la variable que devuelva esto
if( 3 > 2 ) ( a == 3, b == 2 )
return b;
else
return a;
>> asignó 5 a la variable b
Al final parece que por poco que uno quiera escribir se extiende más de lo que desearía, pero vamos
como conclusión se usa [ variable = condición ? verdad : mentira ] dónde verdad y mentira son valores
que creo que es lo que andabas buscando.
A pesar de ser éste su uso normal, también se puede [ condición ? verdad : mentira ]
dónde verdad y mentira sean expresiones (por eso tu ejemplo compila sin pegas )
pero yo personalmente no lo aconsejo, para eso mejor usar los if...else que para eso están.
Espero que te haya servido de ayuda a ti y/o a cualquier otro, un saludo a tod en s (que es la primera vez
que escribo xD ).
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100530/f4ad0de5/attachment.html>
Más información sobre la lista de distribución Cconclase